Apache mod_rewrite не работает - PullRequest
       1

Apache mod_rewrite не работает

0 голосов
/ 06 января 2012

Я пытаюсь перенаправить запросы на http://www.site.com/customer на https : //www.site.com/customer и скрыть расширения .php, но это не работает.Это мои файлы конфигурации:

httpd.conf:

LoadModule rewrite_module modules/mod_rewrite.so

mysite.conf:

<Directory /var/www/site/customer>
  Order Deny,Allow
  Allow from all
</Directory>
Alias /customer /var/www/site/customer

.htaccess в / var / www / site / customer:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}

#unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]

#redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.*)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.*)\.php$ $1 [R=301,L]

#resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

Я что-то упустил?

1 Ответ

2 голосов
/ 06 января 2012

Да, вы что-то упустили;)

Вот некоторые изменения:

  • вы забыли перенаправление и последний тег в правиле HTTPS
  • вы забыли QSAдиректива для сохранения строки запроса при переадресации

Так вот, это может помочь, но, возможно, не будет работать на 100% (но это все равно намного лучше, чем было в любом случае):

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://$1 [QSA,NC,L]

#unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [QSA,R=301,L]

#redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.*)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.*)\.php$ $1 [QSA,R=301,L]

#resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [QSA,L]

Два совета:

Если вы не находитесь в размещенной среде (= если это ваш собственный сервер, и вы можете изменять виртуальные хосты, а не только файлы .htaccess), попробуйтеиспользовать директиву RewriteLog: она помогает вам отследить такие проблемы:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)

...