我刚开始学习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>
答案 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/