GVKun编程网logo

.htaccess RewriteRule保留GET URL参数(url保留字符)

7

最近很多小伙伴都在问.htaccessRewriteRule保留GETURL参数和url保留字符这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展.htaccessmod_rewri

最近很多小伙伴都在问.htaccess RewriteRule保留GET URL参数url保留字符这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展.htaccess mod_rewrite子目录到URL参数、.htaccess RewriteRule 提供正确的链接,但也提供 404、.htaccess RewriteRule添加到URL的驱动器path、.htaccess – URL Rewrite在Nginx中不起作用等相关知识,下面开始了哦!

本文目录一览:

.htaccess RewriteRule保留GET URL参数(url保留字符)

.htaccess RewriteRule保留GET URL参数(url保留字符)

htaccess url重写后,保持URL的参数正常工作时出现问题。

我的htaccess重写如下:

 RewriteEngine on RewriteRule ^([a-z]{2,2})/([a-zA-Z0-9_-]+)$ index.php?lang=$1&page=$2

意思是:

domain.com/index.php?lang=en&page=product 显示为 domain.com/en/product

出于某种原因,当我?model=AB123&color=something在URL的末尾添加a
$_GET[''model'']$_GET[''color'']即使显示的URL中存在这些参数,也无法使用php检索这些参数。

为什么不传递变量?

答案1

小编典典

您需要附加[QSA](查询字符串附加)标签。尝试

RewriteEngine onRewriteRule ^([a-z]{2,2})/([a-zA-Z0-9_-]+)$ index.php?lang=$1&page=$2 [QSA]

参见http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

.htaccess mod_rewrite子目录到URL参数

.htaccess mod_rewrite子目录到URL参数

我希望这个问题不会一遍又一遍地被提出来,但是我没有深入到使用google,w3schools等等的答案。 所以这里是我的问题:我正在编写一个脚本,它创build了一些我在主页上的项目索引,并根据一个信息文件制作了一个包含图像和传情文本的好列表。 我主要有我的项目在github上,自述是在降价,所以我想我可以dynamic生成从github的最新blob的markdown使用PHP的需求,所以它会自动更新的HTML。 我的目录结构如下所示:

projects project1 .remoteindex .info project2 .remoteindex .info index.PHP .htaccess

所以当只有domain.tld/projects/被请求的时候,我从.info获得信息,并为所有的项目build立一个好的索引。 但是,如果domain.tld/projects/project1/正在请求它,我想在内部redirect到domain.tld/projects/?dir=project1来做我的markdownparsing等等。 但是domain.tld/projects/project1/image.png不应该被redirect。

这是我试过的:

.htaccess RewriteEngine on RewriteRule ^([^/]+)/?$ index.PHP?dir=$1 [R,L]

我做了redirect而不是重写,所以我可以看到错误是什么,因为我刚刚得到了404。我被redirect到的URL是domain.tld/home/www/web310/html/projects/index.PHP?dir=project1所以显然有一些错误的内部结构的Web服务器的path一样。 我希望你能理解我的问题,如果有人能帮助我,我会很高兴,因为我完全无法使用.htaccess 。

将通配符子域redirect到子目录,而不更改地址栏中的URL

recursionmod_rewritesearch引擎友好的url

.htaccess重写:子域名作为GET参数和文件path完好无损后

在.htaccess中使用基于环境variables的RewriteCond

PRESTASHOP Nginx + REWRITE规则

编辑:

看到我的答案下面的使用.htaccess 。

奇怪的是,如果我在子目录中有一个index.html ,我的本地Web服务器(带有Mac OS X 1.7.3的XAMPP的Apache)不会重写,并且index.html会显示出来,而没有一个工作正常但是在我服务我的主页的真实web服务器上,它改写了index.html (这是我想要的)。 有什么提示?

mod_rewrite不适用于Windows 7上的Apache 2.2

在apache localhost服务器上使用.htaccess文件

Htaccess维护模式允许某些目录

使用Nginx的try_files将所有非现有文件的请求重写为index.PHP

使用.htaccess重写GET查询string

感谢所有的帮助! 你们真棒!

我发现两种解决方案的共生对我来说很合适:

RewriteEngine on RewriteBase /projects RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} -d RewriteRule ^([^/]+)/?$ index.PHP?dir=$1 [QSA,L]

当然只有没有[R] ,这是我的错。 (请参阅我的问题请编辑另一个问题)。

你需要添加一个RewriteBase /projects到htaccess。 这样的重定向将正常工作。

编辑:

RewriteEngine on RewriteRule ^index.PHP - [L] RewriteRule ^([^/]+)/?$ index.PHP?dir=$1 [R,L]

按照你的要求,重要的是不要做重定向,但是让重写过程在内部修改URL即RewriteRule不应该以[R,L]结束,而应该是[L] ,也许“ query string append ”指令保留那是什么? 所以这应该是[QSA,L] 。

下面是我如何避免重写静态文件:如果它不是一个文件然后(并且只有那样)测试它:

# if it''s not a file... RewriteCond %{SCRIPT_FILENAME} !-f # ... and it''s a dir RewriteCond %{SCRIPT_FILENAME} -d # ... then rewrite it internally and stop further processing: RewriteRule projects/([^/]+)(/?)$ index.PHP?dir=$1 [QSA,L]

现在有两个提示:

请尝试使用RewriteLog指令:它可以帮助你追踪这样的问题:

# Trace: # (!) file gets big quickly,remove in prod environments: RewriteLog "/web/logs/mywebsite.rewrite.log" RewriteLogLevel 9 RewriteEngine On

我最喜欢的工具来检查正则表达式:

http://www.quanetic.com/Regex (不要忘了选择ereg(POSIX)而不是preg(PCRE)!)

总结

以上是小编为你收集整理的.htaccess mod_rewrite子目录到URL参数全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

.htaccess RewriteRule 提供正确的链接,但也提供 404

.htaccess RewriteRule 提供正确的链接,但也提供 404

根据您展示的样品,您可以尝试以下操作吗?公平的警告我已经在移动设备上写了这个,所以还没有测试它应该可以工作恕我直言也会在某个时候测试它。此外,由于您提到可能有多个域,所以我特意在此处添加了一个条件来检查它是否是 example.nl,以防您想重写对任何域的请求,那么我们也可以省略该条件。

RewriteEngine ON
RewriteCond %{HTTP_HOST} ^example\.nl$ [NC]
RewriteRule ^([a-zA-Z]+)/?$ %{HTTP_HOST}/_sites/$1 [L]

注意:如果您的目录/文件夹不一定以字母开头并且可以是任何内容,则将上面的正则表达式从 ^([a-zA-Z]+)/?$ 更改为 ^([.*])/?$

,

无需硬编码主机名,您可以在站点根目录 .htaccess 中尝试以下规则:

RewriteCond %{HTTP_HOST}::%{THE_REQUEST} ^(?:www\.)?([^:]+)::GET\s/+\1/_sites/(\S*)\s [NC]
RewriteRule ^ /%2 [R=301,NE,L]

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^[^/]+/?$ %1/_sites%{REQUEST_URI} [L]

.htaccess RewriteRule添加到URL的驱动器path

.htaccess RewriteRule添加到URL的驱动器path

我使用安装在Win7机器上的C:上的Zend Server CE(v.5.1.0)。 我添加了一个项目到httpd.conf :

Alias /project "D:Homepagesproject" <Directory "D:Homepagesproject"> Options Indexes FollowSymLinks AllowOverride all Order allow,deny Allow from all </Directory>

项目目录中的.htaccess文件包含以下内容:

RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_URI} ^/w*.(css|js) [NC] RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.PHP [NC,L]

现在来解决这个问题。 如果我去

HTTP://localhost/project/index.PHP

重写浏览器的位置栏中显示的规则

重写URL的Glype(Nginx)

设置x-frame-options来允许和禁止某些URL来构build一个页面

需要htaccessredirect

从https转换到http时,RewriteRule违反

一切似乎工作正常。 我到达index.PHP文件并得到我的内容。 但是,如果我去任何其他页面,将触发RewriteRule,似乎是添加目录path。 FireFox输出以下Not Found消息:

在此服务器上找不到请求的URL /Homepages/project/index.PHP。

我试图在这里find类似的问题/答案,但失败了。 任何想法? PS。 我接受一个答案可能会延迟,因为我会出差一段时间。

将URL重写为index.PHP,但避免在URL中使用index.PHP

.htaccess – RewriteCond:坏标志分隔符

使用Apacheconfiguration为每个站点指定PHP包含目录

如何处理自定义url模式的重写?

easyPHP .htaccess规则

让你的最后一行是这样的:

RewriteRule ^.*$ /index.PHP [NC,L]

但是我认为这是无限循环,所以我会建议这个规则:

RewriteCond %{THE_REQUEST} !s/index.PHP [NC] RewriteCond %{REQUEST_URI} !^/index.PHP [NC] RewriteRule . /index.PHP [L]

如果它已经是/index.PHP,则防止进入index.PHP。

您需要设置RewriteBase指令; 否则,会自动mod_rewrite,并且默认情况下会将文件路径预加重到生成的重写规则。

来自: http : //httpd.apache.org/docs/2.0/mod/mod_rewrite.html

当一个新的URL发生替换时,这个模块必须重新将这个URL注入到服务器处理中。 为了能够做到这一点,它需要知道相应的URL前缀或URL基础是什么。 默认情况下,这个前缀是相应的文件路径本身。 但是,对于大多数网站来说,URL并不直接与物理文件名路径相关,所以这个假设通常是错误的! 因此,您可以使用RewriteBase指令来指定正确的URL前缀。 如果您的网络服务器的URL与物理文件路径没有直接关系,那么您将需要在每个要使用RewriteRule指令的.htaccess文件中使用RewriteBase。

总结

以上是小编为你收集整理的.htaccess RewriteRule添加到URL的驱动器path全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

.htaccess – URL Rewrite在Nginx中不起作用

.htaccess – URL Rewrite在Nginx中不起作用

URL重写在Nginx中不起作用,操作系统是Ubuntu 12.4 Lts

当打开http://mvc.loc它正在工作
但是当我试图打开http://mvc.loc/login不工作时

404未找到

Nginx的/ 1.1.19

.htaccess

<IfModule !mod_rewrite.c>
    ErrorDocument 500 "mod_rewrite must be enabled"
</IfModule>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$/index.PHP?u=$1

mvc.loc的虚拟主机

server {
    listen 80;
    server_name mvc.loc;
    access_log /var/log/Nginx/mvc.loc.access.log;
    error_log /var/log/Nginx/mvc.loc.error.log;
    root /usr/share/Nginx/www/mvc;

    index       index.PHP;


    # use fastcgi for all PHP files
    # Are you sure you have this set up?
    location ~ \.PHP${
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.PHP;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # deny access to apache .htaccess files
    location ~ /\.ht {
     deny all;
    }

}

解决方法:

location / {    
   rewrite ^(.*)$/index.PHP?u=$1 last;
}

关于.htaccess RewriteRule保留GET URL参数url保留字符的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于.htaccess mod_rewrite子目录到URL参数、.htaccess RewriteRule 提供正确的链接,但也提供 404、.htaccess RewriteRule添加到URL的驱动器path、.htaccess – URL Rewrite在Nginx中不起作用等相关内容,可以在本站寻找。

本文标签: