htaccess: перенаправление на новую проблему с URL - PullRequest
1 голос
/ 03 октября 2010

Я бы хотел перенаправить любую страницу php с необязательным параметром на новый чистый URL

например, от: account.php?id=156 до newurl/account/156

Я использую следующий редирект

RedirectMatch ^/cmstut/([a-zA-Z0-9_]+)[\.php]?[\?]?[a-zA-Z_]?[=]?([0-9]+)?$ /cmstut/redirect/newurl/$1/$2/$3 [L]

но результат, который я получаю, будет перенаправлен на newurl/account//?id=156

Я думал, что это было забавно, когда я читал где-то, где htaccess и регулярное выражение сравнивались с voodoo :) Теперь мы поймем, почему

Ответы [ 3 ]

2 голосов
/ 03 октября 2010

Я не понимаю, где находится ваше третье подвыражение.

$ 1: ([a-zA-Z0-9_]+)
$ 2: ([0-9]+)
$ 3: MIA

Могу я порекомендовать что-нибудь ещекак это?/cmstut/([A-Za-z0-9]+)\.php(\??id=([0-9]+))? тогда вам, возможно, придется использовать $ 3 для доступа к номеру идентификатора.Вы хотите, чтобы весь параметр был необязательным, верно?

1 голос
/ 03 октября 2010

Я никогда раньше не использовал перенаправления URL в .htaccess, но если это обычные регулярные выражения, это должно работать:

RedirectMatch ^/cmstut/([a-zA-Z0-9_]+)\.php(\?[a-zA-Z_]+=([0-9]+))?$ /cmstut/redirect/newurl/$1/$3 [L]

Поскольку вы не очень точно указали, что вы хотите, я сделал несколько предположений. Это перенаправит foo.php?bar=123 на newurl/foo/123 и проигнорирует bar.


Редактировать: Думая об этом, переписав свое регулярное выражение для вас, не поможет вам в долгосрочной перспективе, и никто, кроме вас, вероятно, не будет точно знать, что вы хотите. Я думаю, что лучший курс действий направит вас к руководству по регулярным выражениям. Здесь - один, и он специально предназначен для mod_rewrite.

0 голосов
/ 03 октября 2010

Я наконец нашел решение. Я провел еще несколько исследований и использовал другой подход, который, я считаю, был даже лучше, чем тот, который я использовал

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC]
RewriteRule ^([A-Za-z0-9]+)\.php$ /cmstut/redirect/newurl/account/%1? [R=302,L] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...