我尝试创建一些htaccess
来改变网址等
到
它在很大程度上起作用,因为我可以访问该页面而无需查找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]
感谢所有帮助,
感谢。
答案 0 :(得分:1)
首先,如果您不确定错误的位置,可以尝试使用.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。
答案 1 :(得分:1)
首先测试电影页面,并测试是否存在.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]