簡體   English   中英

mod_rewrite規則500內部服務器錯誤

[英]mod_rewrite rule 500 internal server error

我想從擴展URL重定向到無擴展URL。 例如,/ contact應該閱讀/contact.php的內容。 我使用以下規則來實現這一目標:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]

有一個名為test.php的文件,其中包含一個名為“ id”的變量。 我想將讀取請求從/ test / 1重定向到test.php?id = 1

我使用以下方法實現此目的:

RewriteRule ^test/([0-9]+)/?$            /test?id=$1      

由於某些原因,調用test / 1文件會導致500個內部服務器錯誤。 如果我刪除隱藏php擴展名的規則,它將再次起作用

另外,如何強制對帶有擴展名的URL進行永久重定向? 例如,如果有人聯系到達/contact.php,則應將其重定向到/ contact

謝謝

您可以使用以下代碼:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# your existing rule (fixed)
RewriteRule ^test/([0-9]+)/?$ /test.php?id=$1 [L,NC,QSA]

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]

## To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ /$1.php [L]

這是在我的htaccess 。確保在Apache中啟用了mod_rewrite

RewriteEngine On
# Redirect .php requests to url without an extension
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L]
RewriteRule ^([^/.]+)$ $1.php [L]
# This will remove the trailing slash unless it's a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L]

暫無
暫無

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

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