首先,我道歉。这个主题已经反复地被重新定义,(我知道。我读过它们。)但是由于某种原因,我的情况很奇怪,或者我在.htaccess中有其他问题。
客观
... 3和4是踢腿者。
以下代码是我在此之前一直使用的.htaccess ...
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
## Imagine Some Code here ##
# Redirect to domain with www.
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Same for HTTPS:
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Ensure all directory URLs have a trailing slash.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301]
# Same for HTTPS:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301]
</IfModule>
我尝试在我注意到的地方添加以下片段。
RewriteRule ^$ /index.php [L]
RewriteRule ^([a-zA-Z0-9\-\_/]*)/$ /$1/index.php [L]
RewriteRule ^([a-zA-Z0-9\-\_/]*)\.(html|htm)$ /$1.php [L]
RewriteRule ^([a-zA-Z0-9\-\_/]*)$ /$1.php [L]
和
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
最成功的是:
# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ https://www.actual_domain.com.au/$1 [R=301,L]
# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ https://www.actual_domain.com.au/$1 [R=301,L]
# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]
最后一个实际上非常好,但是,我根本无法在子目录中以任何格式(带/不带扩展名)访问php文件。而且所有添加满足要求4的东西的尝试都行不通。
就我所希望的那样,有人去做BAM,就完成了。使用和享受。我也很想知道出什么问题了。
谢谢。
-编辑-
按照misorude的要求,以下URL是示例。
URL : actual_domain.com.au/blog-读取文件: /blog.asp
URL: Actual_domain.com.au/path/to-file-读取文件: /path_to-file.asp
URL::actual_domain.com.au/dir/file-读取文件: /dir/file.asp
在最后一个示例(/ dir /)中,存在dir目录。使用/ path /,它不是目录。
现在,关于目标3的措辞,我发现我尝试的.htaccess代码似乎在物理上阻止了子目录中的任何内容返回404。(例如,上面的最后一个示例引用/ dir /)
最后,关于/或_的重写,该文件包含_,我希望它在URL中以/的形式出现。
答案 0 :(得分:0)
您可能具有以下.htaccess权限:
# turn directory slash on
DirectorySlash On
RewriteEngine On
# add www to a domain name taking care of both http and https
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
# remove .php from URLs
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]
# ignore all files and directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# add .php extension
# RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+?)/?$ $1.php [L]
# Replace / by _ recursively
RewriteRule ^([^/]+)/(.+)$ $1_$2
请确保在测试时只有这些规则,并在新的浏览器上进行测试以避免旧的缓存。