Как мне разрешить конфликт правил в этом файле .htaccess? - PullRequest
1 голос
/ 27 марта 2012

Каждое из правил в файле работает хорошо, если я закомментирую другое, но оба из них вместе не достигают какой-либо цели, а делают сайт уродливым. Любое предложение о том, как решить эту проблему? Спасибо.

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
# If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} !-l
# do not do anything
RewriteRule ^ - [L]

# forward /blog/foo to blog.php/foo
RewriteRule ^blog/(.+)$ blog.php/$1 [L,NC]

# forward /john to user_page/profile.php?name=john
RewriteRule ^((?!blog/).+)$ user_page/profile.php?uid=$1 [L,QSA,NC]

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

Попробуйте заменить RewriteRule ^((?!blog/).+)$ на RewriteRule ^(.+)$, нет необходимости проверять blog строку снова

1 голос
/ 27 марта 2012

Я наконец понял это. Я изменил второе условие перезаписи, потому что второе правило перезаписи перенаправляет на URL, который не является обязательным действительным, т.е. www.example.com/username, на предполагаемый действительный URL, который выглядит следующим образом www.example.com/user_page/profile.php?user=username.

Я также изменил последнее / второе правило перезаписи, как предложил Сафаров, и это сработало! Ниже приведен полный файл .htaccess.

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
# OR If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f  [OR]
# OR If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
# do not do anything
RewriteRule ^ - [L]

# forward /blog/foo to blog.php/foo
RewriteRule ^blog/(.+)$ blog.php/$1 [L,NC]

# forward /john to user_page/profile.php?name=john
RewriteRule ^(.+)$ user_page/profile.php?uid=$1 [L,QSA]
...