正确使用mod_rewrite的方法

时间:2014-11-24 09:56:23

标签: php regex apache .htaccess mod-rewrite

我已经关注了很多stackoverflow问题和谷歌搜索但我不能正确地重写我的网址。 这是我网站的一个简单的例子

root-|
     |__mydomain-|
                 |
                -|
                 |__cat1-|__.htaccess
                 |       |__index.php
                 |       |__single.php
                 |
                 |__.htaccess
                 |__index.php  // home-page

我的主页包含一个菜单链接: mysite.com/cat1
- >正确显示“root / cat1 / index.php ”。

问题1:
对于包含cat1 / post-id / title的任何其他链接,我需要将网址重写为 single.php?id = post-id

mysite.com/cat1/123/title  
   ->  should show single php with content of post with id:123

我在root / cat1 / .htaccess中写了什么

Options +FollowSymLinks
RewriteEngine on
<IfModule mod_rewrite.c>

RewriteBase /cat1/


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ single.php?id=$1 [L,QSA]

</IfModule>

我收到错误,如

[Mon Nov 24 13:49:08.549284 2014] [:error] [pid 7144:tid 784] [client 127.0.0.1:21397]
script 'C:/wamp/www/single.php' not found or unable to stat

1 个答案:

答案 0 :(得分:1)

您可以在/cat1/.htaccess内稍微更改一下规则:

Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /cat1/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\d+)/(.+?)/?$ single.php?id=$1&title=$2 [L,QSA]

</IfModule>

确保此内容位于/cat1/.htaccess

PS:我添加了title参数,以便您可以在single.php文件中验证标题是否正确(如果需要)。