.htaccess重写从错误的目录加载文件

时间:2015-10-04 15:12:51

标签: regex apache .htaccess mod-rewrite

我正在使用RewriteRule来创建SEO友好网址。创建规则后,它会在错误的目录中查找外部文件。

.htaccess文件代码:

# 1 -- Error 404 --
ErrorDocument 404 /NotFound.php

#2 -- IGNORE INDEX --
IndexIgnore *
#3 -- Default charter set --
AddDefaultCharset UTF-8

RewriteEngine On       
RewriteRule ^questions/([0-9]+) questions.php?id=$1 [NC,L]

通常它从css/filename.css加载CSS。 应用重写规则后,它会从questions/filename.css

加载文件

如何创建只更改网址行为的RewriteRule以及如何自动强制questions.php?id=34&title=somethingquestions/34/something

1 个答案:

答案 0 :(得分:2)

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

其他您可以在页面的<head>部分HTML <base href="/" />下方添加此内容,以便每个相对网址为从该基本网址解析而不是从当前网页的网址解析。

对于第二个问题,您需要重定向规则以将旧网址重定向到漂亮链接。

这样做:

# 1 -- Error 404 --
ErrorDocument 404 /NotFound.php

#2 -- IGNORE INDEX --
IndexIgnore *
#3 -- Default charter set --
AddDefaultCharset UTF-8
Options -MultiViews
RewriteEngine On   

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /questions\.php\?id=([^\s&]+)&title=([^\s&]+)\s [NC]
RewriteRule ^ /questions/%1/%2? [R=302,L,NE]

RewriteCond %{THE_REQUEST} /questions\.php\?id=([^\s&]+)\s [NC]
RewriteRule ^ /questions/%1? [R=302,L,NE]

# internal forward from pretty URL to actual one
RewriteRule ^questions/([0-9]+)/?$ questions.php?id=$1 [NC,L,QSA]

RewriteRule ^questions/([0-9]+)/([\w-]+)/? questions.php?id=$1&title=$2 [NC,L,QSA]