htaccess的增加.PHP至$ _GET变量的末尾添加斜线
问题描述:
,当我试图创建的htaccess
一点点从什么改变一个URL像
到
它的作用大部分在于我可以访问该页面,而无需定位scripts
和CSS文件。但是,如果我试图回显$_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]
所有帮助表示赞赏,
感谢。
答
测试影片页第一,并测试与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。
不要使用'MOD-rewrite'隐藏文件扩展名,那就是'MultiViews'是。所发生的一切就是你的第一个重写规则是匹配你想要的URL并重定向到“page/_abc-123.php”,然后由你的第二条规则 – Phil