2013-07-24 48 views
3

我一直在搜索堆栈溢出,试图弄清楚这一点,但没有喜悦,不管我尝试什么都不断收到错误。.htaccess重写cond和规则不能在末尾加上额外的斜线

我目前使用此代码重写地址删除扩展,我是从一个SO发布前一阵子为简单的网站:

RewriteEngine on 

# To externally redirect /dir/foo.html to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC] 
RewriteRule^%1 [R=301,L] 

# To internally forward /dir/foo to /dir/foo.html 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule^%{REQUEST_URI}.html [L] 

# To externally redirect /dir/foo.html to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.phtml [NC] 
RewriteRule^%1 [R=301,L] 

# To internally forward /dir/foo to /dir/foo.html 
RewriteCond %{REQUEST_FILENAME}.phtml -f 
RewriteRule^%{REQUEST_URI}.phtml [L] 

(我使用PHTML文件作为UI文件和PHP的背景文件,因此第二个块)

这对我来说很好,但现在我在一个网站,我想饲料变得一个页面书签等,不希望地址是像www.website.com/page?var=0

我hav e设法让我的测试网站加载www.website.com/page/使用代码从另一个SO帖子,但只有当我输入该网址,它不会重写,如果我去page.html,并不会加载附件css,js(我明白这一点是因为文件有相对路径)编辑:我现在明白这是用-f || !-F; 代码:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^([^/]+)/$ $1.html 
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.html 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ /$1/ [R=301,L] 

我很好无论是具有或不具有一个斜线,但我想添加它时,还存在变数,就像page?var=0page/var=0无图像,JS和CSS停止。当然,如果可以全部用斜线,那就更好了。

感谢

编辑:还需要在网站的.htaccess是一个子文件夹,喜欢的工作:mysite.com/example/websitedemonstration/page

+0

如果你使用QSA标志,你不会对查询字符串有问题,例如'[QSA,L]'或'[R = 301,QSA,L]'等等.QSA会将查询字符串附加到下一个URL,所以它会保留'?var = 0',因为如果你不就像结束反斜杠那么你最好把它从'/ $ 1 /'移到'/ $ 1',然后在'/?$' – Prix

+0

上加一个'?'嘿,谢谢你的帮助。我希望结束反斜杠,但它不能正常工作。我快到了,我可以从外部重定向到'/ page /',但内部不能指向这个文件!我使用'RewriteCond%{REQUEST_FILENAME} .html -f'换行 '重写规则^ /%{REQUEST_URI} .html [L]' –

回答

2

这一个似乎工作罚款我试试看:

Options +FollowSymLinks -MultiViews 

RewriteEngine On 
RewriteBase/

# To externally redirect /dir/foo.html to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.(html|phtml) [NC] 
RewriteRule^%1 [R=301,L] 

# To internally forward /dir/foo to /dir/foo.html 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^([^/]*)/?$ $1.html [L] 

# To internally forward /dir/foo to /dir/foo.phtml 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.phtml -f 
RewriteRule ^([^/]*)/?$ $1.phtml [L] 
+0

这工作正常,如果我删除重写基地和类型www .... /页 - 加载没有相关的图像CSS等如果我输入www ..../page/- 但给出一个错误,如果我添加一个变量/page.html?var=a。我刚刚发现,如果我想在没有变量的标准页面上结尾的斜杠,我需要更新所有链接和附加文件,并预先加入'../'编辑:我可以问什么'([^ /] *) –

+0

确定它几乎在那里,除了在页面和变量之间添加斜线之外,代码适用于所有内容!例如:'page.html?var = a'变成'page?var = a',是否有可能使它成为'page /?var = a'非常感谢您的帮助 –

+0

@ slappy-x根据您的第一条规则,使用%1 /并且会附加?如果它有一个。 – Prix