htaccess переписать правило - PullRequest
1 голос
/ 28 июля 2011

Я использую htaccess, чтобы переписать свои URL, так что вот что у меня есть:

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?page=$1 [L]

Так что, если я перейду на domain.com / services , то он отлично работает, но яхочу сделать так, чтобы он набрал domain.com / services.php , тогда он будет работать, а не найден.

Кроме того ... если я захожу на domain.com/services/ (с косой чертой), он действует так, как будто не найден.Почему это?

Ответы [ 4 ]

3 голосов
/ 28 июля 2011

У вас ограниченный «цикл перезаписи» (ограничен только 2 итерациями). Используйте эти правила:

# do not do anything for already existing files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]

RewriteRule ^([a-z0-9_\-]+)(\.php)?$ index.php?page=$1 [NC,L,QSA]

Если вам это не нравится, вот альтернатива (но я все же предпочитаю # 1, но, возможно, этот будет лучше для вашей логики установки / приложения - это предполагает, что index.php находится в корневой папке сайта) :

RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^([a-z0-9_\-]+)(\.php)?$ index.php?page=$1 [NC,L,QSA]
0 голосов
/ 28 июля 2011

Для второго требования (расширение php) попробуйте это

RewriteRule ^([a-zA-Z0-9_-]+)(\.php)?$ index.php?page=$1 [L]

без проверки, но оно должно работать.

0 голосов
/ 28 июля 2011

Это должно работать для вас:

RewriteRule ^ ([a-zA-Z0-9 _-] +) index.php? Page = $ 1 [L]

Вы не являетесьразрешая точку, поэтому «.php» завершается неудачно с выражением, так как оно заканчивается на $

0 голосов
/ 28 июля 2011
RewriteRule ^([a-zA-Z0-9_-]+)\.php$ index.php?page=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?page=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)\/$ index.php?page=$1 [L]

добавить косую черту как допустимый возможный символ (примечание ^ ([a-zA-Z0-9 _-] +) \/ $)

...