1

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

4

3 回答 3

1

如果您想重写/user<userId>/profile.php?id=<userId>重写其他 URL 到/redirect.php,那么您可以尝试以下两个配置指令:

RewriteEngine on

RewriteRule ^user([a-zA-Z0-9_-]+)/?$ /profile.php?id=$1 [L]

RewriteRule .* /redirect.php

或者:

RewriteEngine on

RewriteRule ^user([a-zA-Z0-9_-]+)/?$ /profile.php?id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /redirect.php
于 2013-05-04T18:31:20.450 回答
0

将以下内容添加到第二个 RewriteRule 作品。

# Rewrite by default to redirect.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* redirect.php

但我不确定,为什么需要这样做。

于 2013-05-04T18:37:08.507 回答
0

[L] 标志仅在当前迭代中停止处理,但 mod_rewrite 重复过程,直到路径不恒定。在您的情况下,我认为您可以使用此规则:

RewriteRule ^user\d+$ profile.php

RewriteCond %{REQUEST_URI} !profile.php
RewriteRule ^.*$ redirect.php
于 2014-06-04T12:04:44.840 回答