我正在尝试在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
有效,它会以某种方式覆盖第二个。
有人可以就此提出建议吗?
答案 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]