【问题标题】:Mode Rewrite; with/without trailing slash on end of url?模式重写;网址末尾有/没有斜杠?
【发布时间】:2011-07-02 02:48:52
【问题描述】:

我基本上在下面尝试了这个 mode_rewrite 规则。它在末尾带有斜杠,但我希望它能够在末尾带有斜杠。基本上我希望它像这样,因为有些人认为它是正常的,末尾有一个斜线,而另一些人则不认为它因此无论它是否存在我都希望它工作。

RewriteRule ^signup/register(.[^/]*) /signup/register.php [NC]

基本上它会像 http://localhost/signup/register/ 一样工作,但如果我从末尾删除 / 则会出现 404 错误。

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting friendly-url


    【解决方案1】:
    ...    
    RewriteRule ^(url-rewrite)/?$ page.php [NC]
    ...
    

    ? after / 指定在你的url-rewrite之后可以没有或有一个/,因此它会接受它有或没有尾随/

    【讨论】:

      【解决方案2】:

      普通的旧正则表达式:

      RewriteRule ^signup/register/?$ /signup/register.php [NC]
      

      【讨论】:

        【解决方案3】:

        子模式.[^/]* 至少需要一个任意字符。在你的情况下,它可能是那个斜线。

        你最好坚持一种书写方式(无论是否带有斜杠)并将错误的书写重定向到正确的位置,例如:

        # remove trailing slash
        RewriteRule ^(.*)/$ /$1 [L,R=301]
        
        # add trailing slash
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^.*[^/]$ /$0/ [L,R=301]
        

        【讨论】:

        • 嗨 Gumbo,我这样做是为了删除尾部斜杠,但这不会对服务器造成更大的压力,因为它必须删除尾部斜杠?
        • @PHPLOVER:您应该首先提供正确的 URL。这些规则仅用于修复那些拼写错误的 URL。
        • 好的,谢谢,我明白你的意思了,所以基本上将我的网址更改为站点中新的友好网址,不带斜杠,并且 apache 唯一需要删除 / 是如果有人明显包含它。谢谢,我现在明白了。
        • 对不起,我也是想问的;我应该在 .htaccess 中设置永久重定向到友好的网址吗?为什么我的网站在 Google 中只使用 signup/register.php 并且不确定我是否应该进行永久重定向?我知道该怎么做,但我想我会问。谢谢
        • @PHPLOVER:是的,您应该已经提供了包含“新”URL 的文档。
        猜你喜欢
        • 2013-01-18
        • 2019-06-18
        • 2020-03-14
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        • 1970-01-01
        相关资源
        最近更新 更多