我现在已经搜索了一段时间,找不到我的问题的解决方案,也许我只是不寻找正确的事情,但无论如何,这就是正在发生的事情。
我的.htaccess文件中有以下mod_rewrites。重写工作完美,但如果我没有尾部斜杠,那么它会在网址中自动显示变量。请参阅下面的示例以获得清晰的理解。
如果我输入http://website.com/test/
,(注意尾随斜杠),页面网址将保持完全相同并完全加载内容!
但是,如果我忘记了尾部斜杠,即:http://website.com/test
,则页面网址将更改为http://website.com/test/?var1=test
。 (现在注意我已经省略了开头的尾随斜线)内容仍然正确加载,一切都很好,只是我的URL现在“丑陋”。
我希望我明白这一点,但如果您有任何疑问,请随时提出。谢谢!
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ _client.php?var1=$1&var2=$2&var3=$3&var4=$4&var5=$5 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ _client.php?var1=$1&var2=$2&var3=$3&var4=$4 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ _client.php?var1=$1&var2=$2&var3=$3 [L]
RewriteRule ^([\w-]+)/([\w-]+)/?$ _client.php?var1=$1&var2=$2 [L]
RewriteRule ^([\w-]+)/?$ _client.php?var1=$1 [L]
答案 0 :(得分:2)
由于mod_dir
模块在mod_rewrite
规则完成后添加了一个尾部斜杠,因此会发生这种情况。你有这样的规则来避免这个问题:
DirectorySlash Off
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
# add a trailing slash to directories
RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=302]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ _client.php?var1=$1&var2=$2&var3=$3&var4=$4&var5=$5 [L,QSA]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ _client.php?var1=$1&var2=$2&var3=$3&var4=$4 [L,QSA]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ _client.php?var1=$1&var2=$2&var3=$3 [L,QSA]
RewriteRule ^([\w-]+)/([\w-]+)/?$ _client.php?var1=$1&var2=$2 [L,QSA]
RewriteRule ^([\w-]+)/?$ _client.php?var1=$1 [L,QSA]