簡體   English   中英

.htaccess 重寫規則后,PHP 文件無法訪問 $_GET 變量

[英]PHP file not able to access $_GET variable after .htaccess rewrite rule

我的站點上的 URL 中有許多帶有查詢字符串的 PHP 頁面。 我正在嘗試更改 SEO 的 URL,為此我使用了 .htaccess 文件。

我是 .htaccess 的新手,所以這是相當基本的,我不確定我是否做得對,或者是否有更好的方法來做到這一點。

我的 .htaccess 文件:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteCond %{REQUEST_URI} !/.css$
RewriteCond %{REQUEST_URI} !/.js$
RewriteCond %{REQUEST_URI} !/.png$
RewriteCond %{REQUEST_URI} !/.jpg$

RewriteRule ^category/([0-9a-zA-Z]+) category.php?id=$1
RewriteRule ^product/([0-9a-zA-Z]+) product.php?id=$1
RewriteRule ^page/([0-9a-zA-Z]+) page.php?page_id=$1

這允許我訪問category/1的頁面category.php?id=1與我重寫規則的其他頁面相同。 但是,我的 php 腳本無法再從 URL 訪問 $_GET 變量,因此它正在正確重寫但現在無法顯示任何內容?

您需要關閉MultiViews選項並對規則進行一些重構。

Options -MultiViews
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^category/([0-9a-zA-Z]+)/?$ category.php?id=$1 [L,NC,QSA]
RewriteRule ^product/([0-9a-zA-Z]+)/?$ product.php?id=$1 [L,NC,QSA]
RewriteRule ^page/([0-9a-zA-Z]+)/?$ page.php?page_id=$1 [L,NC,QSA]

選項MultiViews (參見http://httpd.apache.org/docs/2.4/content-negotiation.html )由Apache's content negotiation module ,該Apache's content negotiation modulemod_rewrite之前運行並使 Apache 服務器匹配文件的擴展名。 因此,如果/file是 URL,則 Apache 將提供/file.html

暫無
暫無

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

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