Мод переписывает большинство запросов в index.php - PullRequest
1 голос
/ 20 июля 2009
Options +FollowSymlinks
RewriteEngine On
RewriteBase /

##RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.(js|ico|gif|jpg|png|css)$ [NC]
RewriteCond %{REQUEST_FILENAME} !^index.php [NC]
RewriteCond %{REQUEST_FILENAME} !^$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d

## RewriteRule ^/([a-zA-Z_+-]+).php$  index.php?p=%1 [R=301]
## RewriteRule ^/?([-a-zA-Z0-9_+]+)$ index.php?p=$1 [R=301,L]
## RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php?b={REQUEST_FILENAME}
RewriteRule * index.php?p={REQUEST_FILENAME} [R=301,L]

Вы можете увидеть мои попытки перенаправить любой запрос, который не является существующим каталогом, не является index.php и не является статическим ресурсом для перенаправления на index.php? P = resourcename

Мне не повезло. По сути, целью этого является перенаправление статических и старых URL-адресов на новые, поскольку я только что переписал старый сайт.

PHP будет обрабатывать логику перенаправления.

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

Ответы [ 3 ]

2 голосов
/ 20 июля 2009

Не проверено, но стоит попробовать:

RewriteRule .* /index.php?p={REQUEST_FILENAME} [R=301,L]

Часть ". *" Означает, что вы хотите сопоставить 1 или более символов (любой из них). И "/" перед "index.php", вероятно, не является обязательным, но проясняет ситуацию, даже если у вас уже установлена ​​опция RewriteBase "/".

Вы также можете добавить параметр «QS» в скобки, чтобы быть уверенным, что получена строка запроса, которая может быть передана с запросами (это будет [QS, R = 301, L]). Надеюсь, что это работает, и это помогает:)

Редактировать: перед "{REQUEST_FILENAME}" также стоит "%", как утверждает Гамбо.

1 голос
/ 20 июля 2009

Этот код в конце концов решил мою проблему.

Спасибо за помощь.

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !index.php
RewriteRule ^/?([-a-zA-Z0-9_+]+).php$ /$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^/?([-a-zA-Z0-9_+]+)$ index.php?p=$1 [L]
0 голосов
/ 20 июля 2009

Вы забыли % перед переменной (%{REQUEST_FILENAME}) и выражение, которое должно повторяться ноль или более раз (* - это просто квантификатор):

RewriteRule .* index.php?p=%{REQUEST_FILENAME} [R=301,L]
...