簡體   English   中英

Apache mod_rewrite不起作用

[英]Apache mod_rewrite is not working

我正在嘗試將請求重定向到http://www.site.com/customerhttps://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

/ 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]

我錯過了什么嗎?

你錯過了什么;)

以下是一些修改:

  • 您忘記了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

我最喜歡檢查regexp的工具:

http://www.quanetic.com/Regex (別忘了選擇ereg(POSIX)而不是preg(PCRE)!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM