我只是想让mod_rewrite工作,而且我有一个巨大的心理障碍,似乎没有任何工作。
我的.htaccess文件隐藏了我的文件的文件扩展名,我不确定这是否是我的重写无效的原因。
这是我的.htaccess代码:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1.php?project=$2
Options +FollowSymLinks
使用重写规则我试图将projects.php?project = 1显示为projects / project / 1
如果有人可以告诉我我做错了什么,我真的很感激。
答案 0 :(得分:1)
问题不是以L
(最后)标志和规则排序结束规则。用以下代码替换您的代码:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteRule ^([^/]+)/([^/]+)/$ /$1.php?project=$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
答案 1 :(得分:0)
RewriteCond
仅适用于第一条规则。如果您希望第二条规则具有相同的条件,则必须复制它们。
订单很重要。首先应用第一条规则并将/projects/project/1
重写为/projects/project/1.php
,然后再重写为/projects/project/1.php.php
和/projects/project/1.php.php.php
,...,因为条件/path/to/projects.php -f
始终为真。您必须添加一个附加条件以防止这种无限循环。
第二条规则从未尝试过。
最后,regular expression ^([^/]+)/([^/]+)/$
与projects/project/1
不匹配。您必须添加一个尾随(\d+)
以将项目编号捕获为$3
RewriteRule ^([^/]+)/([^/]+)/(\d+)$ /$1.php?project=$3
或
RewriteRule ^([^/]+)/([^/]+)/(\d+)$ /$1.php?$2=$3
如果规则应该更加通用。