【问题标题】:.htaccess: Redirect Trailing Slashes.htaccess:重定向尾部斜杠
【发布时间】:2016-10-29 03:47:34
【问题描述】:

我在根目录下的.htaccess 文件中有以下重写规则:

RewriteEngine On

# Exclude .css / .js / ...
RewriteCond ${REQUEST_URI} ^.+$
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]

# Rewrite Rule
RewriteRule ^([^/]*)/([^/]*)$ /index.php?category=$1&product=$2

所以 URL http://example.com/data1/data2 给我category=data1product=data2

问题是以下 URL 不起作用:

http://example.com/data1          # Not Working (Page Not Found)
http://example.com/data1/data2/   # Not Working (Page Not Found)

但这些 URL 可以正常工作:

http://example.com/data1/         # Works -> category=data1
http://example.com/data1/data2    # Works -> category=data1 & product=data2

如何重定向前两个 URL 到第二个?

或/与

做一些事情,所有的网址都重定向到非尾随斜杠。所以下面的网址:

http://example.com/data1/
http://example.com/data1/data2/

被重定向到这些:

http://example.com/data1
http://example.com/data1/data2

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite trailing-slash


    【解决方案1】:

    为避免尾随斜杠,请执行重定向

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ /$1 [R,L]
    

    要匹配一个仅包含一个元素的 URL,您可以使用第二条规则

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)$ /index.php?category=$1&product= [L]
    

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)$ /index.php?category=$1 [L]
    

    把所有东西放在一起给出

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ /$1 [R,L]
    
    RewriteRule ^(.+?)/(.+)$ /index.php?category=$1&product=$2 [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)$ /index.php?category=$1 [L]
    

    【讨论】:

    • 感谢您的回答。第一个有效,但我无法使第二个有效。您能否提供正确进行这些重定向的完整 .htaccess 内容?所以我不会有重复的内容,并且两个 URL 都重定向到非尾部斜杠。
    • 如果你想避免重复的内容,你必须先做一个重定向。但是,您不再需要尾随的可选斜杠。请参阅修改后的答案。
    • 感谢您的描述和回答。
    • 我在 URL 中遇到了 unicode 字符的问题。例如,URL“example.com/data1/data2”工作正常,但 URL“example.com/نموذج/مثال”不工作。你能帮忙解决这个问题吗?
    • 现在,我不知道。通常 URL 应该是百分比编码的,但我不知道 mod_rewrite 是否看到编码版本。如果您有特定问题,请搜索 .htaccess 和 UTF-8,例如stackoverflow.com/search?q=%5B.htaccess%5D+utf-8。第一个问题是关于Regex utf-8 arabic,也许还有更多。如果这些都没有帮助,请提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2019-03-28
    • 2013-05-10
    • 2017-09-28
    相关资源
    最近更新 更多