无法在 .htaccess 中为我的 php 网站编写重写规则

Posted

技术标签:

【中文标题】无法在 .htaccess 中为我的 php 网站编写重写规则【英文标题】:Unable to write a rewrite rule in .htaccess for my php website 【发布时间】:2014-02-17 01:16:05 【问题描述】:

我的网站是 v2.example.com,我正在尝试编写 .htaccess 规则但无法。

我想要这个:v2.example.com/ABCDEFGH

我想将值 ABCDEFGH 作为参数获取,例如 v2.example.com/index.php?id=ABCDEFGH

谁能帮我解决这个问题。

我试过这个:

<IfModule mod_rewrite.c>
RewriteEngine On 
RewriteBase /
RewriteRule ^(.*) index.php?id=$1 [L]
</IfModule>

请帮帮我。

【问题讨论】:

【参考方案1】:
RewriteEngine on
RewriteRule ^(.*)$  index.php?id=$1 [L,QSA]

这将在进入无限循环时崩溃,因为 index.php 被进一步重写为 index.php?id=index.php 等等

解决方案

RewriteEngine on
RewriteRule ^([^_]*)$   _index.php?id=$1 [L,QSA]

即创建页面_index.php,并将所有没有_的页面重写到该页面,这样就不会陷入无限循环,如果你认为你会选择~而不是_在你的参数中需要 _

【讨论】:

【参考方案2】:

你的规则是这样的:

<IfModule mod_rewrite.c>
RewriteEngine On 
RewriteBase /

# external redirect from actual URL to pretty one
RewriteCond %THE_REQUEST \s/+index\.php\?id=([^\s&]+) [NC]
RewriteRule ^ %1? [R=302,L]

# internal forward from pretty URL to actual one
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^(.+)$ index.php?id=$1 [L,QSA]
</IfModule>

【讨论】:

以上是关于无法在 .htaccess 中为我的 php 网站编写重写规则的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .htaccess 指向目录以加载索引

在所有浏览器中为我的网站启用平滑滚动

.htaccess 不重定向到 404.php 而是显示页面名称

htaccess 和两个 post 参数

.htaccess 文件不适用于我的项目

如何在我的 iphone 中为我的网站添加有效且受信任的安全证书?