【问题标题】:.htaccess rewrite with / at the end.htaccess 最后用 / 重写
【发布时间】:2014-08-14 12:19:35
【问题描述】:

所以我在 my.htaccess 中有以下代码

 Options +FollowSymlinks
 RewriteEngine on
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^([\w\d~%.:_\-]+)$ category.php?id=$1 [NC]

哪个改变了网址:www.domain.com/category.php?id=uncategorized

www.domain.com/uncategorized

但是,当我转到 http://www.domain.com/uncategorized/ 末尾带有斜线时,它说该页面不存在。有谁知道我怎么做才能使新 URL 可以正常工作,无论它是否以斜杠结尾,以及其他类似的东西?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    这会将结尾不带斜杠的网址重定向到结尾带斜杠的网址。

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^.*[^/]$ /$0/ [L,R=301]
    

    【讨论】:

      【解决方案2】:

      您可以将斜杠设为可选并添加QSA 标志:

       Options +FollowSymlinks
       RewriteEngine on
      
       # add a trailing slash
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{THE_REQUEST} \s/+(.*?)[^/][?\s]
       RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301]
      
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteRule ^([\w\d~%.:-]+)/?$ category.php?id=$1 [L,QSA]
      

      【讨论】:

      • 这太棒了!有没有办法让它总是以斜线结尾?也许将 URL 重定向到始终使用斜杠?
      • 好像有问题。现在我所有的链接、图像和 CSS 文件都有它们的文件名。例如,如果我访问 domain.com/category,我的所有链接都将类似于 domain.com/category/index.php,而它应该是 domain.com/index.php。换句话说,我认为文件名已添加到每个链接的基本 URL 中。
      • 在这些规则中没有我在 URI 中添加 index.php 的位置,所以我确信这是在这些规则之外发生的。如果您注释掉尾部斜杠规则,它可以正常工作吗?
      • 不不,你没有添加 index.php。但是,如果我在页面某处有一个 index.php 链接作为 html 链接,它会将文件名添加到其中。因此,如果我访问 domain.com/filename,页面上的 index.php 链接将变为 /filename/index.php。因此,如果我单击 index.php,它会将我带到 /filename/index.php,这是错误的。
      • 那是因为您使用的是相对 URL。只需在您的 css、js、图像文件中使用绝对路径,而不是相对路径。这意味着您必须确保这些文件的路径以 http:// 或斜杠 / 开头。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2023-01-12
      • 2015-10-31
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      相关资源
      最近更新 更多