需要协助此Htaccess重写规则

时间:2017-09-27 15:59:47

标签: .htaccess mod-rewrite

我的.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但我没有得到任何答案。如果这是一个重复的问题,请留下我。

1 个答案:

答案 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]