Помогите с регулярным выражением с mod_rewrite - PullRequest
1 голос
/ 27 июня 2009

У меня есть такие ссылки, которые я хочу изменить:

mypage.com?page=missions&id=5
mypage.com?page=hello

Я попытался изменить их на более простые ссылки с помощью:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)$ /index.php?page=$1&id=$2 [L]

Это работает, но если я хочу получить доступ к таким страницам, как (mypage.com?page=hello), мне нужно написать:

mypage.com/hello/

и если я напишу без косой черты в конце, как это

mypage.com/hello

это не работает.

Как мне это исправить? :)

Ответы [ 3 ]

3 голосов
/ 27 июня 2009

Это должно работать:

RewriteRule ^([^/]*)(/([^/]*))?$ /index.php?page=$1&id=$3 [L]

Это сделает косую черту необязательной, включив ее в необязательную группу (обозначенную (...)?) вместе с необязательной второй половиной строки запроса. Так как это вводит новую группу между первой и второй (левая скобка определяет порядок), мы должны изменить вторую обратную ссылку с $2 на $3.

Если логика становится намного более сложной, чем эта, может быть легче разделить правила.

1 голос
/ 27 июня 2009

Вы можете добавить второе правило, которое пропускает второй параметр и, возможно, косую черту:

RewriteRule ^([^/]+)/?$ /index.php?page=$1
RewriteRule ^([^/]+)/(\d+)/?$ /index.php?page=$1&id=$2

Это тоже может сработать:

RewriteRule ^([^/]+)(?:/(\d+))?/?$ /index.php?page=$1&id=$2

Для SEO вы, вероятно, захотите перенаправить запросы, пропускающие косую черту, на тот же адрес с косой чертой. Для этого используйте RedirectMatch.

0 голосов
/ 27 июня 2009

Я читал о конце косой черты с SEO (не знал об этом, спасибо Мэтью!), И окончательный результат был такой:

RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?page=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ /index.php?page=$1&id=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ http://www.mypage.com/$1/ [R=301,L]

Так что теперь я заставляю его иметь косую черту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...