htaccess的增加.PHP至$ _GET变量的末尾添加斜线

问题描述:

,当我试图创建的htaccess一点点从什么改变一个URL

http://localhost/website/page.php?id=_abc-123

http://localhost/website/page/_abc-123

它的作用大部分在于我可以访问该页面,而无需定位scriptsCSS文件。但是,如果我试图回显$_GET["id"],而不是_abc-123,我会得到_abc-123.php

这是我到目前为止我htaccess的文件中:

Options +FollowSymLinks 

# remove extensions 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

# movie page 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^page/([^/]*)$ page.php?id=$1 [L] 

所有帮助表示赞赏,

感谢。

+0

不要使用'MOD-rewrite'隐藏文件扩展名,那就是'MultiViews'是。所发生的一切就是你的第一个重写规则是匹配你想要的URL并重定向到“page/_abc-123.php”,然后由你的第二条规则 – Phil

测试影片页第一,并测试与PHP文件存在:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 

# movie page 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^page/([^/]*)$ page.php?id=$1 [L] 

# remove extensions 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^([^.]+)/?$ $1.php [L] 

首先,如果您不确定错误在哪里,您可以尝试使用.htaccess的在线工具,如htaccess.mwl.be

很明显,您的第一个RewriteRule接口会遇到,这会导致您的“错误”。

有了这个工具的帮助,以及如何正则表达式的工作有一定的了解,我们可以修复你的.htaccess这样:

Options +FollowSymLinks 

# remove extensions 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC] 

# movie page 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^page/([^/]*)$ page.php?id=$1 [L] 

我唯一改变的是从你的第一RewriteRule删除“L”标志,因为它的RewriteCond被满足了,但我们需要它通过第二个RewriteRule

有关L-flag的更多信息,请参阅documentation