我正在尝试通过htaccess文件重写URL,以便以下网址
www.domain.com/subfolder/index.php?key
可以通过以下方式访问:
www.domain.com/subfolder/index.php/key
指定的"键"将确定要包含在PHP代码中的页面。 我已经有了以下htaccess代码,但是在使用第二个(干净)URL时没有显示CSS,JS,图像等。关于什么可能是问题的任何想法?
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{DOCUMENT_ROOT}/$1 -f
RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC]
RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1
答案 0 :(得分:6)
当您使用相对网址时,浏览器将使用其加载的资源的网址动态创建完整的网址。换句话说:它使用地址栏中显示的URL。在您的情况下(www.domain.com/subfolder/index.php/key
),它会尝试加载相对于www.domain.com/subfolder/index.php/
的任何相对网址。但是,您的资源不在那里。
您有两种方法可以解决此问题:
将您的相对网址转换为绝对网址,至少是域根目录的绝对网址。 <img src="img/unicorn.png">
之类的内容应该转换为<img src="/path/to/img/unicorn.png">
。
为头部元素添加基础。将使用此基础而不是资源的URL来计算完整的URL。您应该将<base href="/">
添加到<head>
元素中。然后/
将用作任何相对网址的基础。
答案 1 :(得分:1)
您是否尝试过基本网址?这是我遇到的最佳解决方案。只需将其中一个放在头部,然后您甚至可以为其提供ID并使用javascript访问该URL。
<base id='baseElement' href="your path goes here"> <!--possibly generated with serverside code-->
使用jquery访问
var base = $('#baseElement').attr('href');
答案 2 :(得分:1)
实际上有一个.htaccess的解决方案!
假设您的index.php位于/mysite/
且您的资源文件位于/mysite/scripts/
,/mysite/images/
和/mysite/style/
之类的地雷中,您可以这样:< / p>
RewriteEngine on
#first exclude those folders
RewriteBase "/mysite/"
RewriteRule ^(style|scripts|images)($|/) - [L]
#then go with your rules (the [L] terminates the ruling)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{DOCUMENT_ROOT}/$1 -f
RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC]
RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1
您可以通过其他几种方式查看.htaccess mod_rewrite - how to exclude directory from rewrite rule
答案 3 :(得分:0)
此外,您可以尝试将此添加到您的HTaccess:
RewriteBase /