奇怪的htaccess查询参数

时间:2012-11-11 12:47:59

标签: .htaccess mod-rewrite redirect

我在这个网站上搜索了一些但是找不到我问题的正确答案。

我正在尝试强制进行www重定向并在每个网址上强制执行结束。

我的htaccess中有以下几行:

# enable rewriting
RewriteEngine on

# if not a file or folder, use index.php
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L]

# force www
RewriteCond %{HTTP_HOST} !^www
RewriteRule .? http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# force endslash
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule (.*) %{REQUEST_URI}/ [L,R=301]

我的www重定向工作正常,它会像:

http://example.com 

to 

http://www.example.com

但现在奇怪的是,我的结束斜线是添加我不想要的url参数。

所以这将是:

http://www.example.com/path/without/endlash 

to 

http://www.example.com/index.php/?url=path/without/endslash

为什么在这种情况下使用我定义的url参数,如何防止这种情况。

提前致谢


编辑:

感谢icrew

在endlash条目之前只添加了no-file / no-dir,否则会重定向我的资产。

最终代码:

RewriteCond %{HTTP_HOST} !^www
RewriteRule .? http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule (.*) %{REQUEST_URI}/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

1 个答案:

答案 0 :(得分:1)

.htaccess的这一部分

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L]

负责http://www.example.com/index.php/?url=path/without/endslash重定向。所以基本上如果您不希望查询字符串中的url参数删除这三行。

编辑:我弄清楚你想要什么。贝娄是正确的代码

# enable rewriting
RewriteEngine on

# force www
RewriteCond %{HTTP_HOST} !^www
RewriteRule .? http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# force endslash
RewriteCond %{REQUEST_URI} !(.*)/$
#next row prevent redirection if final rewriting is done
RewriteCond %{REQUEST_URI} !=/index.php 
RewriteRule (.*) %{REQUEST_URI}/ [L,R=301]

# if not a file or folder, use index.php
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
#QSA because I suppose you dont want to discard the existing query string. Remove QSA if you want to discard
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]