使用htaccess清理网址

时间:2014-12-20 20:35:20

标签: php apache .htaccess mod-rewrite url-rewriting

我正在尝试使用RewriteRules来使用我的HTACCESS文件获取干净的网址。

这是我到目前为止所拥有的

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

上面的代码带有一个类似于company.com/about.php的网址,并将其转换为company.com/about/,因此我的所有链接网址都是这样的" / about /"由于重写规则,我没有添加.php。

我现在要做的是添加一条规则,在传递参数时清理我的网址。例如 company.com/about/?profile=member_name我希望它看起来像company.com/about/member_name

我已尝试过下面的两个重写代码,但它不起作用。

RewriteRule ^([a-zA-Z0-9]+)$ /our_work.php/ [L]
RewriteRule ^/our_work.php([^/\.]+)/?$ ?project=$1 [L]

请注意,我的文件扩展名已经从网址条带化了。

请帮忙

提前谢谢

1 个答案:

答案 0 :(得分:0)

Apache提供了有关RewriteRule使用的文档,您应该在继续之前阅读。

在这种特殊情况下,您可以通过实施此规则将/about/{member_name}重写为/about.php?profile={member_name}

RewriteRule ^about/([a-zA-Z0-9]+)(/)?$ about.php?profile=$1 [L]

规则规定:请求的URL必须以about/开头,后跟字母和数字(匹配#1),并且可以通过附加的结束正斜杠(匹配#2)继续;并且它将被替换为URL about.php,其中profile查询字符串的值为匹配#1。 L标志表示应忽略遵循此规则的任何规则。

试图"级联"规则不适用于您当前的规则集,因为/about/{...}与第一条规则不匹配。