繁体   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