我想在.htaccess文件中有多个RewriteRules。
# Enable Rewriting
RewriteEngine on
# Rewrite profile urls
# Input: /user<userId>
# Output: /profile.php?id=<userId>
RewriteRule ^user(\d+)/?$ profile.php?id=$1 [L]
# Rewrite by default to redirect.php
RewriteRule .* redirect.php
每个请求都指向redirect.php
我认为,使用第一个RewriteRule中的[L]标志,将停止处理规则集。
答案 0 :(得分:1)
如果您想将/user<userId>
重写为/profile.php?id=<userId>
并将其他网址重写为 /redirect.php ,那么您可以尝试以下两种配置指令:
RewriteEngine on
RewriteRule ^user([a-zA-Z0-9_-]+)/?$ /profile.php?id=$1 [L]
RewriteRule .* /redirect.php
OR:
RewriteEngine on
RewriteRule ^user([a-zA-Z0-9_-]+)/?$ /profile.php?id=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /redirect.php
答案 1 :(得分:0)
将以下内容添加到第二个RewriteRule中。
# Rewrite by default to redirect.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* redirect.php
但我不确定,为什么需要这样做。
答案 2 :(得分:0)
[L]标志仅在当前迭代中停止处理,但mod_rewrite重复进程直到path不是常量。 在你的情况下,我认为你可以使用这个规则:
RewriteRule ^user\d+$ profile.php
RewriteCond %{REQUEST_URI} !profile.php
RewriteRule ^.*$ redirect.php