htaccess文件中的多个RewriteRules,第一个写入第二个?

时间:2014-05-21 13:32:05

标签: apache .htaccess

我正在尝试在multiple RewriteRules文件中运行htaccess

但是first RewriteRule由于某种原因覆盖了second RewriteRule

这就是我在htaccess文件中的内容:

RewriteEngine On
RewriteBase /

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^([a-zA-Z0-9-/]+).html$ items.php?itemsurl=$1 [L]
RewriteRule ^([a-zA-Z0-9-/]+).html/$ items.php?itemsurl=$1 [L]

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^([a-zA-Z0-9-/]+).html$ blog.php?blogurl=$1 [L]
RewriteRule ^([a-zA-Z0-9-/]+).html/$ blog.php?blogurl=$1 [L]

第一个RewriteRule工作正常,但如果我点击blog.php?blogurl=的链接,它只会转到items.php

我可以将blog.php的RewriteRules放在htaccess文件的顶部,然后将items.php的RewriteRules放在它下面,它会使blog.php rewriterule适用于blog.php,但它会生成重写文件对于items.php停止工作,一切都将指向blog.php页面!

所以基本上,只有RewriteRule文件中的第一个htaccess有效,它会以某种方式覆盖第二个。

有人可以就此提出建议吗?

2 个答案:

答案 0 :(得分:1)

用以下代码替换您的代码:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9-/]+)\.html\/?$ items.php?itemsurl=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9-/]+)\.html\/?$ blog.php?blogurl=$1 [L]

RewriteCond仅影响第一个RewriteRule

apache变量应该在这些制动器中:{},而不是这些() 还有一件事 - 检查.你应该逃避它:\.

答案 1 :(得分:0)

正如评论中所讨论的,您可以使用以下规则:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^items/([\w-]+)\.html\/?$ items.php?itemsurl=$1 [L,QSA,NC]

RewriteRule ^blog/([\w-]+)\.html\/?$ blog.php?itemsurl=$1 [L,QSA,NC]