.htaccess重写问题,没有斜线

时间:2014-10-18 04:30:28

标签: apache .htaccess mod-rewrite redirect url-rewriting

我现在已经搜索了一段时间,找不到我的问题的解决方案,也许我只是不寻找正确的事情,但无论如何,这就是正在发生的事情。

我的.htaccess文件中有以下mod_rewrites。重写工作完美,但如果我没有尾部斜杠,那么它会在网址中自动显示变量。请参阅下面的示例以获得清晰的理解。

网址示例

如果我输入http://website.com/test/,(注意尾随斜杠),页面网址将保持完全相同并完全加载内容!

但是,如果我忘记了尾部斜杠,即:http://website.com/test,则页面网址将更改为http://website.com/test/?var1=test。 (现在注意我已经省略了开头的尾随斜线)内容仍然正确加载,一切都很好,只是我的URL现在“丑陋”。

我希望我明白这一点,但如果您有任何疑问,请随时提出。谢谢!

.htaccess Code

    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]

1 个答案:

答案 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]
相关问题