.htaccess文件更改url字符串在某些页面上不起作用

时间:2014-07-12 11:39:47

标签: php .htaccess url

我更新了我的.htaccess文件,从url字符串中删除.php扩展名。代码在这里:

ErrorDocument 404 /lost.php

RewriteEngine On
RewriteBase /

# remove enter code here.php; use THE_REQUEST to prevent infinite loops
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]

# remove index
RewriteRule (.*)/index$ $1/ [R=301]

# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

一切正常,并且正在移除.php。唯一的问题是,当我尝试访问网站的某个区域(客户区)时,页面根本没有正常显示。屏幕截图如下:

enter image description here

在将上述代码添加到.htaccess文件之前,网址为:

www.mysite.co.uk/client-area.php

将上述代码添加到.htaccess文件后,网址为:

www.mysite.co.uk/client-area/

并且页面未正确显示?知道为什么会发生这种情况以及需要对.htaccess文件代码做些什么来解决这个问题?欢迎任何帮助:)

1 个答案:

答案 0 :(得分:2)

保留你的.htaccess代码:

ErrorDocument 404 /lost.php    
RewriteEngine On
RewriteBase /

# remove enter code here.php; use THE_REQUEST to prevent infinite loops
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} \s/+(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

# remove index
RewriteCond %{REQUEST_METHOD} !POST
RewriteRule (.*)/index$ $1/ [R=301,L,NE]

# remove slash if not directory
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ $1 [R=301,L,NE]

# add .php to access file, but don't redirect
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

要显示css / js / images,只需在css,js,images文件中使用绝对路径,而不是相对路径。这意味着您必须确保这些文件的路径以http://或斜杠/开头。

或者您可以尝试在页面的HTML标题中添加:<base href="/" />,以便从该网址解析每个相对网址,而不是当前网址。