mod_rewrite在htaccess中不起作用

时间:2014-05-29 16:13:07

标签: php .htaccess url mod-rewrite rewrite

在我的目录根目录中的.htaccess文件中,我有这个;

RewriteEngine on
RewriteBase /

RewriteRule ^website-comments/webid/([^/]*)$ /website-comments?webid=$1 [L]

但由于某种原因,它不会重写URL,如果我认为是正确的,那么如果用户访问www.website.com/website-comments?webid=1,它应该将URL更改为www。 website.com/website-comments/webid/1但它似乎没有工作,我做错了什么?提前致谢

编辑1

其他HTACCESS规则

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

3 个答案:

答案 0 :(得分:1)

Apache的mod_rewrite与基本规则一起使用时可以静默地为用户提供内部URL,但它不能强制使用同一个简单规则的内部URL。通常,如果您希望最终用户从不使用实际的URL(在您的情况下为/website-comments?webid=123),则需要首先提供一条规则,通过在原始HTTP中匹配来重定向该URL请求使用Apache的变量%{THE_REQUEST}

RewriteEngine On
# probably don't actually need RewriteBase
RewriteBase /

# First match the URL which the user requested. If it is ?webid=N
# do an actual redirection to the pretty URL
# This will grab digits from the query string to use in %1
RewriteCond %{THE_REQUEST} webid=(\d+)
# ...only doing this for website-comments -- a permanent redirect to the pretty URL
# so the client makes a new request to the pretty URL that won't match the above condition 
# on the next trip.
#
# Since the [R] will automatically append the old query string, add a ?
# onto the end to clear out the query string so this rule doesn't match again and
# go into an infinite loop.
RewriteRule website-comments /website-comments/webid/%1? [L,R=301]

# Then apply your existing rule to rewrite internally to the target resource
RewriteRule ^website-comments/webid/([^/]*)$ /website-comments?webid=$1 [L]

以上(\d+)假设webid只是一个整数。如果这不是真的并且可能包含其他字符,请考虑使用([^&]+)代替匹配下一个&或字符串结尾的所有内容。

答案 1 :(得分:1)

  

如果我的想法是正确的,那么如果用户访问www.website.com/website-comments?webid=1,则应将网址更改为www.website.com/website-comments/webid/1

没有。来自野外的传入 URI“(由用户输入,由书签或搜索引擎提供,或您网站中的链接)将成为SEO形式:/website-comments/webid/1 。 .htaccess的工作是使用查询字符串将其更改为 dynamic 格式,您的PHP脚本可以将其消化(读取$ _GET中的元素):/website-comments.php?webid=1。所以,你倒退了。

RewriteEngine On
RewriteRule  ^website-comments/webid/([0-9]+)/?$  /website-comments.php?webid=$1 [L]

是一种方法,可以满足您的需求。

答案 2 :(得分:-1)

试试这个(切换)RewriteRule参数

RewriteRule ^/website-comments?webid=([^/]*)$ website-comments/webid/$1[L]