我在这个网站上搜索了一些,但找不到我的问题的正确答案。
我正在尝试强制 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]