2015-12-03 7 views
1

У меня есть следующий код mod_rewrite в файле htaccess. Он работал отлично в течение последних нескольких месяцев с тех пор, как я его написал. Но внезапно этим утром он полностью прекратил работать. Любые идеи, как я могу устранить эту проблему?mod_rewrite не работает

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php 
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301] 

RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^/?(.*)$ /$1.php [L] 

RewriteRule ^([\w-:/]+)$ index.php?modname=$1 

** ВОТ МОЯ ORIGINAL ПОЛНЫЙ КОД - НЕОТРЕДАКТИРОВАННЫЙ ***

ErrorDocument 404 "<H1>Page not found</H1>" 
ErrorDocument 403 "<H1>Access denied</H1>" 

RewriteEngine On 

## REQUIRE SSL RULE 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302] 

# browser requests PHP 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php 
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301] 

# check to see if the request is for a PHP file: 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^/?(.*)$ /$1.php [L] 

RewriteRule ^([\w-:/]+)$ index.php?modname=$1 

Это действительно кажется, что mod_rewrite работает, потому что я последовал за интерактивное руководство и сделал основной mod_rewrite так:

RewriteRule cat/(.*)/(.*)/$ /test.php?$1=$2 

И это, кажется, работает, если я открыть ссылку MYDOMAIN/кошка/продукт/123/

* UPDATE *

В качестве временного решения, я добавить пользовательские 404 страницы, как это:

ErrorDocument 404 error404.php 

Затем в файле error404.php я включил index.php работать точно так же, как mod_rewrite было путем применения следующий код:

$modname = ltrim($_SERVER['REQUEST_URI'], '/'); 

Это решает проблему без mod_rewrite. Но это приведет к множеству 404 ошибок в моих файлах журналов, и, следовательно, мне действительно нужно понять, почему перезапись не работает.

Любые предложения, пожалуйста?

+0

Как именно он не работает? Он вызывает сообщение об ошибке? Это неправильно ведет себя? Файл .htaccess' не обрабатывается? –

+0

Файл .htaccess работает, потому что у меня есть пользовательский код 404. Если я перейду к url:/users/adduser, он должен загрузить index.php? Modname = users/adduser, но я продолжаю получать 404 ошибки, что означает, что он не применяется mod_rewrite – Ahmed

+0

Я не пропустил соответствующий код, я просто достал бит SSL, поскольку это правило работает, но с тех пор отредактировал сообщение, чтобы включить его в нижнюю часть. Теперь я отредактирую сообщение и добавлю весь код unmodfied – Ahmed

ответ

0

Я не уверен, работал ли он ранее, как есть или нет, но у вас есть ошибка в шаблоне регулярных выражений последней директивы RewriteRule. Набор символов определяется это:

([\w-:/]+) 

где позиция - характера вызывает проблемы. Поместите символ либо в начале, либо в конце набора символов:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(\S+)\.php 
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301] 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^/?(.*)$ /$1.php [L] 

RewriteRule ^([-\w:/]+)$ index.php?modname=$1 
+0

Спасибо за это, но это не решило проблему. – Ahmed

+0

Возможно, существует гораздо более простой способ сделать это? В основном все, что я пытаюсь сделать, это получить REQUEST_URI всего после mydomain.com/, а затем я просто пытаюсь применить правило RewriteRule, чтобы поместить эту строку REQUEST_URI в index.php? Modname = value_of_request_uri – Ahmed

+0

@Ahmed Можете ли вы подтвердить, что 'mod-rewrite' действительно включен? Поместите некоторые случайные символы в htacccess выше, чтобы разбить его, и посмотрите, вызывает ли сервер 500 ошибок. – hjpotter92

Смежные вопросы