2013-05-04 3 views
1

Я хотел бы иметь несколько RewriteRules в моем файле .htaccess.Несколько RewriteRule

# 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

Я думал, с [L] флаг в первом RewriteRule, остановит обработку набора правил.

ответ

0

Добавляет следующее во второй RewriteRule.

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

Но я не уверен, почему это необходимо.

+0

** 1-й: ** Если запрашиваемое имя файла не является обычным файлом, продолжить выполнение правил. ** 2nd: ** Если запрошенное имя файла не является каталогом, продолжите выполнение правила. – 5ervant

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 
0

[L] флаг прекращает обработку только в текущей итерации, но mod_rewrite повторяет процесс, пока путь не будет постоянным. В вашем случае я думаю, что вы можете использовать это правило:

RewriteRule ^user\d+$ profile.php 

RewriteCond %{REQUEST_URI} !profile.php 
RewriteRule ^.*$ redirect.php