我是服务器配置的新手,并且在使用htaccess配置时遇到了一些困难。我正在使用这个htaccess在没有.php扩展的情况下工作,同时如果用户最后输入.php它也会删除该部分并显示更清晰的URL。在结束部分,我正在使用error.php处理错误
RewriteEngine On
# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://example.com/$1 [R=301,L]
# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/$1 [R=301,L]
# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]
ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php
在root用户的页面上,每件事情都很有效,例如
example.com/contact
但是文件夹中的内容变得复杂,例如
example.com/photo/views
此处不是显示“/photo/views.php”,而是找不到404页面并看到我的错误页面。
但我可以在照片目录下看到索引页面为。
example.com/photo /
但仍然会在
上获得错误页面example.com/photo/index
如果我删除了.htaccess文件,那么一切都可以正常使用.php扩展名。
如果有人能告诉我我做错了什么,我会很高兴。
答案 0 :(得分:2)
您的规则声明请求URI中不允许使用正斜杠。因此,重写将无效。
将您的规则更改为:
RewriteRule ^([^.]+)$ $1.php [L]
我已从表达式中删除了正斜杠,因此它现在只允许句点(.
)。
答案 1 :(得分:1)
您需要从第二条规则中的排除字符类中删除/
并稍微调整一下您的正则表达式:
ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php
RewriteEngine On
# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ /$1 [R=301,L]
# Redirect external .php requests to extension-less url
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=302,L,NE]
# Resolve .php file for extension-less php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]