0

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

我正在尝试强制 www 重定向并在每个 url 上强制使用 endlash。

我的 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]
4

1 回答 1

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]
于 2012-11-11T12:55:01.543 回答