mod_rewrite - как заставить два правила работать вместе - PullRequest
0 голосов
/ 15 июля 2011

Я пытался создать дружественные URL для своего сайта и придерживаться следующих правил:

#enable rewrites
RewriteEngine on
RewriteBase /

# Redirect 404s
ErrorDocument 404 /404_not_found.cfm

# Redirect non www to www

RewriteCond %{HTTP_HOST} ^example.co.uk [NC]
RewriteRule ^(.*)$ http://www.example.co.uk/$1 [L,R=301]

# Add trailing slashes to uri 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !/(images|js|css)
RewriteRule ^([^/.]+)$ /$1/ [R=301,L,NC]

# Redirect any request with page var to /var/ format

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^page=(.+[^/])$ [NC]
RewriteRule ^index\.cfm$ http://%{HTTP_HOST}/%1/ [R=301,L,NC]

# If not an existing file or directory
# Rewrite any request var/ to index.cfm?page=var

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+[^/])/$ /index.cfm?page=$1 [QSA,L]

# property services

# Add trailing slash if not a file or directory and 301 redirect
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^property-services/([^/.]+)$ http://%{HTTP_HOST}/property-services/$1/ [R=301,L,NC]

# Rewrite request any request with page var to property-services/var/
RewriteRule ^property-services/([^/.]+)/$ property-services/index.cfm?page=$1 [L,NC]

Все работает, примите окончательное правило:

# Rewrite request any request with page var to property-services/var/
RewriteRule ^property-services/([^/.]+)/$ property-services/index.cfm?page=$1 [L,NC]

Страница не загружается, когда я пытаюсь запросить:

http://www.example.co.uk/property-services/example-service/

Если я удаляю второе с последнего и правлю, тогда я могу получить страницу для загрузки, запросив:

http://www.example.co.uk/property-services/example-service

Суть в том, что мне нужно загрузить страницу с косой чертой в конце, так как это формат, который я выбрал для сайта. Может кто-нибудь объяснить, где я не прав, пожалуйста?

1 Ответ

1 голос
/ 16 июля 2011

Это правило будет соответствовать любому URL, заканчивающемуся одной косой чертой (но не двойной косой чертой), поэтому оно будет препятствовать достижению вашего последнего правила.

RewriteRule ^(.+[^/])/$ /index.cfm?page=$1 [QSA,L]

Я подозреваю, что вам что-то нужновдоль линий:

RewriteRule ^([^/]+)/$ /index.cfm?page=$1 [QSA,L]
...