将example.com/section.php?username=xyz重写为example.com/xyz/section
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将example.com/section.php?username=xyz重写为example.com/xyz/section相关的知识,希望对你有一定的参考价值。
使用以下htaccess
,我已经能够将example.com/profile.php?username=xyz
重写为example.com/xyz
,
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?user=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?user=$1
在上面添加以下内容,
RewriteRule ^([a-zA-Z0-9_-]+)/section$ section.php?user=$1
RewriteRule ^([a-zA-Z0-9_-]+)/section/$ section.php?user=$1
没有解决example.com/section.php?username=xyz
到example.com/xyz/section
。
我在这里做错了吗?
答案
首先:说话的方式恰恰相反:你所展示的规则是将/xyz
内部的请求重写为/profile.php?username=xyz
而不是相反。
现在,如果你想将/xyz/section
内部的请求内部重写为/section.php?username=xyz
,其中section
和xyz
是可变的,请尝试以下规则:
RewriteRule ^([a-zA-Z0-9_-]+)/?$ profile.php?user=$1
RewriteRule ^([a-zA-Z0-9_-]+)/([^/]+)/?$ $2.php?user=$1
另一答案
要在正确的目录中查找静态文件(images,css)而不必编写文件地址,请执行以下操作:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
在编写RageD建议的代码之前
(对不起,应该把它贴出来作为评论,但我需要换行)
另一答案
我测试了它,它的工作原理。试试这个:
RewriteRule ^([a-zA-Z0-9_-]+)/section$ section.php?user=$1
RewriteRule ^([a-zA-Z0-9_-]+)/section/$ section.php?user=$1
我所做的只是逃避URL中的/
,因为/
是一个正则表达式分隔符。
以上是关于将example.com/section.php?username=xyz重写为example.com/xyz/section的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等