如何使用和不使用尾部斜杠修复htaccess

时间:2015-08-12 14:34:15

标签: php regex apache .htaccess mod-rewrite

您好我面临一个非常小的问题,当我浏览网站时没有尾随斜线它工作正常但是当我添加尾部斜线到最后它将我重定向到404页面

e.g。

  

mysite.com/category/slug-name/page/3 /

     

mysite.com/category/slug-name/page/5 /

工作正常,但当我点击第1页时,它有一个尾随斜杠,即

  

mysite.com/category/slug-name /

它给出错误,但没有尾随斜杠它对我来说很好

同样在文章页面上,当我访问时没有尾随斜杠它可以工作但是当我在最后添加尾部斜杠时,它会将我重定向到404页面,例如当我访问此URL时,它可以正常工作

  

mysite.com/123-article-slug-here

但在这种情况下我收到404错误

  

mysite.com/123-article-slug-here /

我确信我的htaccess存在问题,但知道如何解决它

RewriteEngine On
RewriteRule ^category/([a-zA-Z0-9-/]+)/page/(.+)/?$ category.php?id=$1&page=$2 [NC,L]
RewriteRule ^category/([a-zA-Z0-9-/]+)/?$ category.php?id=$1 [L]
RewriteRule ^([a-zA-Z0-9-/]+)/?$ article.php?url=$1

1 个答案:

答案 0 :(得分:1)

尝试从slug名称正则表达式分组中删除/或使该匹配非贪婪:

从分组中删除/

RewriteEngine On
RewriteRule ^category/([a-zA-Z0-9-]+)/page/(.+)/?$ category.php?id=$1&page=$2 [NC,L]
RewriteRule ^category/([a-zA-Z0-9-]+)/?$ category.php?id=$1 [L]
RewriteRule ^([a-zA-Z0-9-]+)/?$ article.php?url=$1

非贪婪:

RewriteEngine On
RewriteRule ^category/([a-zA-Z0-9-/]+?)/page/(.+)/?$ category.php?id=$1&page=$2 [NC,L]
RewriteRule ^category/([a-zA-Z0-9-/]+?)/?$ category.php?id=$1 [L]
RewriteRule ^([a-zA-Z0-9-/]+?)/?$ article.php?url=$1

可能发生的事情是/在分组内部(parens)匹配并且传递给您的category.php,并且它不喜欢/所以返回404。