清除url mod_rewrite不起作用


Clean url mod_rewrite not working

当前我有一个url

www.mysite.com/folder/details.php?d=sample.com

我希望它像这个一样改变

www.mysite.com/folder/sample.com

这是我的.htaccess文件,但它不起作用:

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

我也试过这个,但它也不起作用:

RewriteEngine On
RewriteRule folder/([0-9]+) details.php?d=$1

这是我的url链接php代码:

<a href="details.php?d=<?php echo $var['var']; ?>"><?php echo $var['var']; ?></a>

我尝试了一些我在这个网站上找到的答案,但我仍然不明白我做错了什么。任何人

谢谢!

您需要一些条件来防止循环:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_.-]+)/?$ details.php?d=$1 [L]

您也可以通过使用末尾的/?将这两个规则组合为一个规则,使斜杠成为可选的。


对于要放置在文档根目录中的规则,您需要将文件夹名称添加到模式和目标中:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^folder/([a-zA-Z0-9_.-]+)/?$ /folder/details.php?d=$1 [L]

感谢您的评论@Jon Lin和@quavivo,我找到了解决我问题的方法,这是我的htaccess:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^portfolio/(.*)$ /portfolio/details.php?d=$1 [L,QSA,NC]

我还更改了我的url链接代码:

<a href="<?php echo $var['var']; ?>"><?php echo $var['var']; ?></a>

希望这对将来的人有所帮助。