多个RewriteRule

时间:2013-05-04 17:34:03

标签: .htaccess mod-rewrite url-rewriting

我想在.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]标志,将停止处理规则集。

3 个答案:

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