#php #mod-rewrite
#php #мод-перезапись
Вопрос:
Я новичок в использовании 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 / идентификатор страницы / заголовок страницы
но не с помощью, и я не могу заставить его работать.
http://www.mydomain.co.uk/index/pid/1/Welcome-to-this-site (имя файла/pid/ идентификатор страницы / заголовок)
Есть ли способ сделать параметр папки ^(.*) / необязательным?
Комментарии:
1. В вашем последнем примере вам либо не хватает «папки», либо «имени файла». » mydomain.co.uk/index/pid/1/Welcome-to-this-site «не соответствует ^(.*)/(.*)/ pid/(.*)/(.*)$ тем не менее, он соответствует: ^(.*)/pid/(.*)/(.*)$
2. Привет, есть ли способ сделать параметр папки необязательным?
Ответ №1:
Чтобы сделать параметр папки необязательным, я бы разделил правило на две части:
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]
Если вас не волнует глубина достижимой папки, следующих правил должно быть достаточно, и они должны совпадать как с именем папки, так и без него:
RewriteRule ^(.*)/pid/(.*)/(.*)$ /$1.php?np=$2 [NC]