php htaccess的初学者指南

时间:2014-02-15 19:57:33

标签: php .htaccess

我刚开始学习htaccess。

我想测试一页:

我有一个名为“favs”的文件夹,里面我有一个php文件索引,从中我传递给带有查询字符串ID的页面gallery.php

所以网址将是:

mainsite.com/favs/gallery.php?id=7

现在我希望网址如下:

mainsite.com/favs/7

这是我在.htaccess文件中写的代码:

<IfModule mod_rewrite.c>


RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ gallery.php?id=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ gallery.php?id=$1

</IfModule>

2 个答案:

答案 0 :(得分:1)

你的规则是错误的。你有这个:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ gallery.php?id=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ gallery.php?id=$1
</IfModule>
只要没有斜杠,

^([a-zA-Z0-9_-]+)$将匹配第一个斜杠后的URL中的所有mainsite.com/favs/7中有一个斜杠,因此规则不匹配,它会查找名为/favs/7的实际目录。你想要的只是匹配收藏后的作品,如下:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^favs/([0-9]+)/?$ favs/gallery.php?id=$1
</IfModule>

如果它位于根目录中,则上面的代码应该放在.htaccess中。如果它在您的/ favs目录中,那么您需要从RewriteRule中删除/favs并添加RewriteBase,如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /favs
RewriteRule ^([0-9]+)/?$ gallery.php?id=$1
</IfModule>

注意:根据您的问题,我从正则表达式中删除了字母_-。如果您需要匹配它们,可以相应地调整上面的规则。

答案 1 :(得分:0)

这是我的完整代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]



RewriteEngine On
RewriteRule ^favs/([0-9]+)/?$ favs/gallery.php?id=$1

</IfModule>

这是网址:

http://www.fullridescholarships.net/favs/