Черточки в URL-адресе, вызывающие ошибку 404 - PullRequest
0 голосов
/ 26 января 2011

Я работаю в PHP (5.2.14) на сервере Apache (1.3.33) с MySQL, и возникла проблема с красивыми URL, созданными нашим файлом .htaccess.Например, www.example.com/pages/page будет работать, в то время как www.example.com/page/this-other-page внезапно больше не будет работать.Если я вместо этого наберу подчеркивание, 404 исчезнет, ​​но URI страниц сохранятся в базе данных с черточками, поэтому он возвращает ошибку CMS «страница не найдена».

Вот правила перезаписи, которые помещаюттире.

RewriteRule ^([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/?$ page.php?module=$1&uri=$2 [L]
RewriteRule ^([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/?$ page.php?module=$1&uri=$2&sec_uri=$3 [L]
RewriteRule ^([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/?$ page.php?module=$1&uri=$2&sec_uri=$3&tri_uri=$4 [L]

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

Или есть правило конфигурации php, которое может это исправить?

1 Ответ

0 голосов
/ 26 января 2011

Насколько я знаю, символы в квадратных скобках не экранированы - попробуйте вместо этого использовать [a-zA-Z0-9_-]. Дефис должен быть последним символом, иначе парсер пытается обработать его как часть диапазона (например, a-z).

...