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 重写规则的主要内容,如果未能解决你的问题,请参考以下文章