RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.php$
RewriteRule ^(.*)/(.*)/(.*)$ $1.php?Action=$2&id=$3
RewriteRule ^(.*)/(.*)$ $1.php?Action=$2
RewriteRule ^(.*)$ $1.php
这是我的.htaccess
。但是只有第一个RewriteRule
有效。如果我注释掉其他规则,剩下的其他规则可以正常工作,但它们不能一起工作。我想要的是带有多个参数的干净 URL。
我对这个问题一无所知。我在 Google 上搜索了很多,找到的所有信息都与我的代码相同。
答案1
您需要使用 C 标志链接您的 RewriteRules,如 ServerFault 页面上所述您想了解有关 Mod_Rewrite 规则的所有信息但又不敢问吗?
对于你的情况,可以这样做:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.php$
RewriteRule ^(.*)/(.*)/(.*)$ $1.php?Action=$2&id=$3 [C]
RewriteRule ^(.*)/(.*)$ $1.php?Action=$2 [C]
RewriteRule ^(.*)$ $1.php
答案2
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.php$
RewriteRule ^(.*)/(.*)/(.*)$ /api/$1.php?Action=$2&id=$3 [L]
RewriteRule ^(.*)/(.*)$ /api/$1.php?Action=$2 [L]
使用 [L] 标志后,我的 htaccess 开始正常工作。