首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.htaccess mod_rewrite重写mod_rewrite

使用.htaccess mod_rewrite重写mod_rewrite
EN

Stack Overflow用户
提问于 2022-05-31 04:59:48
回答 1查看 508关注 0票数 0

在我的网站上,我有3种网址,如下所示,

代码语言:javascript
复制
index.php?p=my-page
index.php?p=my-page&id=12
index.php?p=my-page&id=12&type=d

所以,我需要把他们

代码语言:javascript
复制
example.com/my-page
example.com/my-page/12
example.com/my-page/12/d

我就是这样在我的.htaccess文件中尝试的。

代码语言:javascript
复制
<IfModule mod_rewrite.c>

    # (1)
    RewriteEngine On

    # (2)
    Options +FollowSymlinks
    Options -MultiViews

    # (3)
    # Options +SymLinksIfOwnerMatch

    # (4)
    RewriteBase /

    # (5)
    # RewriteOptions <options>

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)/?$ index.php?p=$1 [L,QSA,NC,B]
    # RewriteRule ^([^/]+)/([^/]+)/?$ index.php?p=$1&id=$2 [L,QSA,NC,B]
    # RewriteRule ^([^/]+)/([0-9]+)/?$ index.php?p=$1&id=$2 [L,QSA,NC]

</IfModule>

上面的第一个RewriteRuleexample.com/my-page工作。但是第二或第三个并不适用于我的其他两个urls。

我的<a>标记如下所示:

代码语言:javascript
复制
<a href="/my-page">Page</a> // this is working for me using above first rule
<a href="/my-page/12/">Page</a>
<a href="/my-page/12/d">Page</a>

有人能告诉我,为何我的规则2或3在这方面不起作用?

EN

回答 1

Stack Overflow用户

发布于 2022-06-08 04:41:44

在规则上使用标志,所以一旦规则匹配,Apache就会在替换时重新启动对匹配的检查。您还缺少了标志,所以替换不仅仅是index.php?...,因为PATH_INFO是附加的。人们通常想要的不是L,而是END

您还可以将它们压缩为单个规则,这样您就不必对每个规则重复RewriteCond指令:

代码语言:javascript
复制
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]++)(?:/([1-9]\d*+)(?:/([^/]++))?+)?+/?+$ index.php?p=$1&id=$2&type=$3 [END,QSA,NC,B]

请参阅正则解释的单元测试部分。

在PHP中,确保参数不是空字符串,例如:

代码语言:javascript
复制
$id = $_GET['id'] ?? '';
if ($id !== '') {
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72442472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档