我有一个urlhttp://www.urlbookmarking.com/bookmarks-details.php?bid=55我希望它像http://www.urlbookmarking.com/bookmark/55
我在我的htaccess中写道:
RewriteEngine on
RewriteRule /bid/(.*) bookmarks-details.php?bid=$1
但是当我转到第一个URL时,重写引擎不应用我的规则。是否有任何错误或冲突?
我的完整htaccess文件写如下
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^'.]+)$ $1.php [NC,L]
RewriteEngine on
RewriteCond %{HTTP_HOST} ^urlbookmarking.com [NC]
RewriteRule ^(.*)$ http://www.urlbookmarking.com/$1 [L,R=301]
RewriteEngine on
RewriteRule /bid/(.*) bookmarks-details.php?bid=$1
请帮帮我。
如果已经在httpd.conf中配置了行Options +FollowSymLinks
,则该行是可选的
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^urlbookmarking'.com [NC]
RewriteRule ^(.*)$ http://www.urlbookmarking.com/$1 [R=301, L]
RewriteRule ^bookmark/([0-9]+)$ bookmarks-details.php?bid=$1 [NC, L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^'.]+)$ $1.php [NC,L]
几件事:
RewriteEngine On
只需要调用一次,尽管这可能不会引起任何问题- 我的
RewriteEngine On
行之后还有RewriteBase /
- 我的重写规则是这样的:
RewriteRule ^common/(.*)$ common.php?file=$1 [QSA,L]
,这告诉我您的规则应该是这样的RewriteRule ^bookmark/(.*) bookmarks-details.php?bid=$1 [QSA,L]
- 您应该只使用一个
RewriteEngine on
RewriteRule /bid/(.*) bookmarks-details.php?bid=$1
-将此行放在Options +FollowSymLinks
之后- 请重试
您希望url是/bid/55
还是/bookmark/55
?因为你把它写成了/bid/55
。。。
无论如何,你的.htaccess应该看起来更像这样:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^urlbookmarking.com [NC]
RewriteRule ^(.*)$ http://www.urlbookmarking.com/$1 [L,R=301]
RewriteRule ^bid/(.*)$ bookmarks-details.php?bid=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^'.]+)$ $1.php [NC,L]
没有多个RewriteEngine on
指令(这些指令不会破坏任何内容,但却是不必要的(,也没有bid
重写规则上的前导正斜杠。此外,将您的新规则放在为不存在的文件重写的规则之前,这样在您有机会使用它之前,它就不会重写您的URL,并在规则中添加[L]
标志,这样它就不会被其他规则进一步修改。此外,将行开始/结束标记(^
/$
(添加到规则中。
如果将规则放在httpd.conf
中,则只使用前导正斜杠,而不在.htaccess
文件中使用它们。
如果您希望您的url为/bookmark/
,只需将bid
替换为bookmark
即可。
这应该重定向所有'/bookmarks details.php?bid=(id(的带有书签id(只有数字(的url到/bookmark/(id(。
RewriteRule ^/bookmarks-details'.php'?bid=([0-9]+) /bookmark/$1 [R, NC, L]
一旦你成功地重写了URL,你就需要编写一个配套规则来处理它,比如:
RewriteRule ^/bookmark/([0-9]+) /bookmarks-details'.php'?bid=$1 [NC, L]
If应该介于总是在开头添加"www"的规则和我放在末尾的catch-all规则之间。总之,它可能看起来是这样的:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^urlbookmarking.com [NC]
RewriteRule ^(.*)$ http://www.urlbookmarking.com/$1 [L,R=301]
RewriteRule ^/bookmarks-details'.php'?bid=([0-9]+) /bookmark/$1 [R, NC, L]
RewriteRule ^/bookmark/([0-9]+) /bookmarks-details'.php'?bid=$1 [NC, L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^'.]+)$ $1.php [NC,L]
这个链接可能会让事情变得更清楚:http://corz.org/serv/tricks/htaccess2.php