我的.htaccess
有问题,我想在我的网站上设置http://example.com/newest
的简短说明。但是,它始终重定向到http://example.com/postname
。我只需要确切的“最新”页面。这是我的代码:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteBase /
RewriteRule ^[^/]+$ %{REQUEST_URI}/ [L,R=301]
RewriteRule ^/category/(.*)$ page.php?f=$1
RewriteRule ^/search/(.*)$ search.php?f=$1
RewriteRule ^(.*)/$ post.php?f=$1 <- If this is removed, my post htaccess will not work
RewriteRule ^newest/$ index.php?f=newest <- I want to execute this code
我真的不知道这叫什么,我一直在寻找整个stackoverflow但我没有得到任何答案。如果这是一个重复的问题,请留下我。
答案 0 :(得分:0)
正如穆罕默德在评论中暗示的那样,你的指令是错误的。 “最新”重写之上的行是一个全能并重写所有请求,因此最后一行永远不会匹配。
http://example.com/newest
请注意,您的规则意味着您的网址应以尾部斜杠结尾。因此,您应该链接到http://example.com/newest/
(使用尾部斜杠),而不是http://example.com/newest
,否则您的用户将获得大量不必要的重定向。
但是,您似乎认为RewriteCond
指令适用于随后的所有指令。不是这种情况。它仅适用于第一个RewriteCond
指令。您还需要一些L
标志以防止进一步处理。
“类别”和“搜索”重写模式也有一个斜杠前缀,因此这些在.htaccess
上下文中永远不会匹配。
请尝试以下内容:
RewriteEngine On
RewriteBase /
# Don't process the request further if it maps to an existing file
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# Append trailing if omitted
# Although strictly speaking this only redirects if there are no slashes at all in the URL
RewriteRule ^[^/]+$ %{REQUEST_URI}/ [L,R=301]
RewriteRule ^category/(.*)$ page.php?f=$1 [L]
RewriteRule ^search/(.*)$ search.php?f=$1 [L]
RewriteRule ^newest/$ index.php?f=newest [L]
RewriteRule ^(.*)/$ post.php?f=$1 [L]