0
我一直在试图使友好的网址为我的网站,并具有以下规则:mod_rewrite的 - 如何让两个规则一起工作
#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
问题是我需要用斜线加载页面,因为这是我为网站选择的格式。有人能解释我错在哪里吗?
只是为了简单:你可以打包最RewriteCond'的'在一起:'的RewriteCond%{} REQUEST_FILENAME -f 的RewriteCond%{ REQUEST_FILENAME} -d RewriteRule。* - [l]' – KingCrunch
感谢您的建议KingCrunch,是一个全球性的规则,所以我不必继续使用RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d为每个规则? –
它对你现在正在做的事情的否定:你说“如果X不是文件而不是目录做Y”(4次)。我说“如果x是文件或目录,什么也不做”,所以你应该只需要它一次。 'RewriteCond%{REQUEST_FILENAME} -f [OR] RewriteCond%{REQUEST_FILENAME} -d RewriteRule。* - [L]'(我忘了'[OR]'-flag;))。它应该使其更具可读性,但我不完全确定,它不会干扰其他规则/ cond。 – KingCrunch