我正在尝试将所有.html和.php文件显示为目录路径,例如
www.domain.com/path/page.html将显示为www.domain.com/path/page /.
我的微弱尝试,基于几个小时的搜索和阅读 - 编辑:做了一些改变行为的改变。
# Rewrite to pretty URL
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteCond %{REQUEST_URI} .*\.(html|php)
RewriteRule ^(\S+\/)*(\S+)\.html$ $1$2/
第一条规则现在将http://www.domain.com/index.html重定向到http://www.domain.com/index/,这是所需的行为。 第二条规则启用后会产生500响应。
# Redirect to actual file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^(\S+\/)*(\S+)\/$ $1$2.html
第一个规则尝试匹配整个路径,然后匹配文件,将其重写为目录格式。
第二次尝试读取目录格式并将其发送到相应的文件。我要死了。两者都没有用,我只是输了。
编辑:当我直接导航到文件夹格式时,它会执行某些操作,但也会对所有css,js和img资源请求添加/ index /,因此它看起来不对。它还会为页面上的所有链接添加/ index /,这会产生404 ...
编辑:这是我的完整htaccess文件供参考。没有什么不同寻常的。
AddType application/x-httpd-php .html .htm
# Prevent Directoy listing
Options -Indexes
# Prevent Direct Access to files
<FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))">
Order deny,allow
Deny from all
</FilesMatch>
# SEO URL Settings
RewriteEngine On
RewriteBase /
# Redirects requests for my images to a bad image
RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?domain\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png|jpg)$ /image/catalog/theft_prevention.jpe [L]
# Redirects non-www to www
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# serve custom error pages
ErrorDocument 400 /error-400.html
ErrorDocument 401 /error-401.html
ErrorDocument 403 /error-403.html
ErrorDocument 404 /error-404.html
ErrorDocument 410 /error-410.html
ErrorDocument 500 /error-500.html
# Rewrite to pretty URL
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteCond %{REQUEST_URI} .*\.(html|php)
RewriteRule ^(\S+\/)*(\S+)\.html$ $1$2/ [R=301, L]
# Redirect to actual file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^(\S+\/)*(\S+)\/$ $1$2.html [R=301, L]