2013-07-08 2 views
2

У меня есть следующий код в моем htaccesssHtaccess не работает, когда hypen (-) используется в URL

RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .?- [S=2] 
RewriteRule ^abc/(.*)/(.*)$ index.php?aa=$1&bb=$2 [NE,L,QSA] 
RewriteRule ^abc/(.*)$ index.php?aa=$1 [NE,L,QSA] 

и когда я прохожу ниже URL

http://example.com/abc/some-example?id=123 

По мне я должен к ге $aa = some-example и $id = 123 в PHP

, но я получаю ошибку ниже

Not Found 

The requested URL /abc/[S=2] was not found on this server. 

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. 

и выше файл .htaccess работает отлично, когда я прохожу URL, как показано ниже

http://example.com/abc/someexample?id=123 

заранее спасибо.

ответ

1

Я думаю, вы пропустили пробел перед тире на этой линии:

RewriteRule .?- [S=2] 

Должно быть:

RewriteRule .? - [S=2] 

EDIT: Почему вы даже это правило? Попробуйте удалить его.

Насколько я могу судить, если запрос не соответствует определенному файлу, вы сообщаете apache пропустить следующие два правила, что приводит к 404 вместо перезаписи.

Возможно, вы также захотите добавить правило в конце для дружественной 404 страницы в случае, если запрашиваемый url не соответствует вашим rewrite regexes.

+0

Спасибо, Райан за помощью. Если я даю пространство, то каждый путь, который я даю, показывает мне ошибку ниже 'Не найдено Запрашиваемый URL/a/someexample/не был найден на этом сервере. Кроме того, при попытке использовать ErrorDocument для обработки запроса была обнаружена ошибка 404 Not Found. –

+0

после googling онлайн Я обнаружил, что то, что вы предложили, является правильным способом. Но, я не знаю, почему я не получаю вывод, который я ищу. :( –

1

Благодаря Райан,

меняю

RewriteRule .?- [s=2]

в

RewriteRule ./ - [s=2] 

помог мне получить то, что я искал

благодаря Райан снова.

+0

Вы уверены, что вам вообще нужно правило? Что произойдет, если вы удалите строку? –

+0

Это правда. Мне не нужна следующая строка, которая у меня была .. :(.. 'RewriteRule^abc /(.*) $ index.php? aa = $ 1 [NE, L, QSA] '.. –

+0

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