PHP/Apache:用 .htaccess 重写规则

Posted

技术标签:

【中文标题】PHP/Apache:用 .htaccess 重写规则【英文标题】:PHP/Apache: Rewrite rules with .htaccess 【发布时间】:2011-10-22 08:56:46 【问题描述】:

我对 mod_rewrite 有点进退两难。 如何编写将决定以下内容的规则:

如果我浏览 /en/page/page 我想将其重写为: index.php?language=en&page=/page

但如果我只浏览 /page 我想将其重写为: index.php?page=/page

这可能吗?

编辑: /page 只是一个随机的动态页面名称,它也可以是whatever

我需要一个规则来检查 /se == 一个字符串,并且不超过 2 个字符>/page --> index.php?lang=se&page=/page 如果浏览页面 /page 它会注意到 / page == 超过 2 个字符并重写为 index.php?page=/page

编辑2: 找到了我的问题的答案:

重写引擎开启 RewriteBase / ## 检查它是否不是文件名或目录名 RewriteCond %REQUEST_FILENAME !-l RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d ##重写规则 RewriteRule ^(.2)/(.*)$ index.php?lang=$1&page=$2 [L] RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

【问题讨论】:

【参考方案1】:

我让它自己工作! 如果其他人需要做同样的事情,以下是规则:

重写引擎开启 RewriteBase / ## 检查它是否不是文件名或目录名 RewriteCond %REQUEST_FILENAME !-l RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d ##重写规则 RewriteRule ^(.2)/(.*)$ index.php?lang=$1&page=$2 [L] RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

【讨论】:

【参考方案2】:
RewriteRule ^page$ index.php?language=en&page=/page/page [L]
RewriteRule ^page/ index.php?language=en&page=/page [L]

【讨论】:

【参考方案3】:

试试这个:

RewriteRule ^(.*)/(.*)(/.*)$ index.php?language=$1&$2=$3 [L]
RewriteRule ^page$ index.php?page=/page/page [L]

【讨论】:

以上是关于PHP/Apache:用 .htaccess 重写规则的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 用问号“?”重写 URL

.htaccess 用两个变量重写 url

htaccess 用最终的子文件夹重写 url

用.htaccess文件实现URL重写

用 .htaccess 重写不起作用

.htaccess 用 WordPress 插件重写