2013-07-31 7 views
0

У меня возникли некоторые проблемы переписывания URL-адреса со следующими правилами.htaccess правила для отдельных типов страниц

RewriteEngine on 

RewriteRule ^page/(.*)$ index.php?pag=cms&title=$1 [NC] 
RewriteRule ^admin/(.*)$ admin/$1 [NC] 
RewriteRule ^(.*)$ index.php?pag=$1 [NC,L] 

То, что я пытаюсь добиться, чтобы проверить, если URL является страница CMS или нет, и оставить admin URL как они есть. Если я удалю последнее условие, это сработает, но у меня не будет правила для не страниц cms.

В идеале я хотел бы иметь только одно правило для каждой страницы (cms или нет), но я не могу понять, как проверить это, кроме использования page/ в URL-адресе.

ответ

1

Mod_rewrite будет держать пробегает по всем правилам, пока URI не перестает изменяться (или она достигнет своего внутреннего предел редиректа, resuling в ошибке 500). Вам нужно добавить несколько условий для последнего правила, так что он не будет переписывать адреса URI, который уже был правильно проложен:

RewriteRule ^page/(.*)$ index.php?pag=cms&title=$1 [NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?pag=$1 [NC,L] 

Кроме того, второе правило ничего не делает, кроме Проходного, так что вы можете заменить его

RewriteRule ^admin/(.*)$ - [NC,L] 
0

Вы нужны эти правила:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

из Apache documentation:

'-d' (is directory) 
Treats the TestString as a pathname and tests whether or not it exists, and is a directory. 
'-f' (is regular file) 
Treats the TestString as a pathname and tests whether or not it exists, and is a regular file.