我正在尝试将请求重定向到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
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]
我错过了什么吗?
答案 0 :(得分:2)
你错过了什么;)
以下是一些修改:
所以在这里,这可能有所帮助,但也许不会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
我最喜欢检查regexp的工具:
http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)