我是初次使用mod_rewrite并且可以提供一些帮助,这是我到目前为止已经成功完成的工作
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/pid/(.*)/(.*)$ /$1/$2.php?np=$3 [NC]
RewriteRule ^news/article/(.*)$ /news/details.php?newstag=$1 [NC]
这适用于以下链接: http://www.mydomain.co.uk/about/about/pid/2/About (文件夹/文件名/ pid /页面ID /页面标题
但没有,我无法让它发挥作用。
http://www.mydomain.co.uk/index/pid/1/Welcome-to-this-site (文件名/ pid /页面ID /标题)
有没有办法让文件夹选项^(。*)/ optional?
答案 0 :(得分:0)
要使文件夹选项可选,我会将规则分为两部分:
RewriteRule ^(.*)/(.*)/pid/(.*)/(.*)$ /$1/$2.php?np=$3 [NC]
RewriteRule ^(.*)/pid/(.*)/(.*)$ /$1.php?np=$2 [NC]
请注意“。”匹配所有内容,包括“/”,因此,我猜两个规则都匹配一个URL,如: http://www.mydomain.co.uk/one/two/three/four/pid/1/Welcome-to-this-site
$ 1的地方是:“一/二/三”和$ 2:“四”。
要避免这种情况,请使用[^ /]而不是“。”:
RewriteRule ^([^/]*)/([^/]*)/pid/([^/]*)/([^/]*)$ /$1/$2.php?np=$3 [NC]
RewriteRule ^([^/]*)/pid/([^/]*)/([^/]*)$ /$1.php?np=$2 [NC]
如果您不关心可访问的文件夹深度,则以下规则应该足够并且在有和没有foldername的情况下都匹配:
RewriteRule ^(.*)/pid/(.*)/(.*)$ /$1.php?np=$2 [NC]