在我的目录根目录中的.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]
答案 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]