我希望你能提供帮助。我正在尝试写一个htaccess文件,请执行以下操作。
1)重定向到www。地址
2)从网址中删除.php
3)如果文件不存在,则使用filechecker.php?page = filename
1我可以用
RewriteCond%{HTTP_HOST} ^ example.com $
RewriteRule(。*)http://www.example.com/ $ 1 [R = 301,L]
2)我可以用
RewriteCond%{SCRIPT_FILENAME} .php -f
RewriteRule [^ /] $%{REQUEST_URI} .php [QSA,L]
3)我想
RewriteCond%{REQUEST_FILENAME} .php!-f
RewriteRule ^([^ /] *)$ filechecker.php?page = $ 1 [QSA,L]
会起作用,但由于某种原因,它忽略了页面确实存在的事实。
我希望你能提供帮助 标记
答案 0 :(得分:0)
你的解决方案2将循环,但很简单,可以修复,在第2和第3部分的文件中贴上以下几行:
#If the Browser request contains a .php, instruct the browser to remove it.
RewriteCond %{THE_REQUEST} \.php [NC]
RewriteRule ^/?(.*)\.php$ http://%{HTTP_HOST}/$1 [R=301,NC,L]
#If a request is received for a non file-system object, that doesn't have a .php suffix, then store the full path, filename, and URI in a variables with that extention.
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-s
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !^\.php$ [NC]
RewriteRule ([^/]+)$ - [E=testScript:%{SCRIPT_FILENAME}.php,E=testFile:$1.php,E=testURI:%{REQUEST_URI}.php]
#See if the file exists with a .php extention, if it does internally rewrite
RewriteCond %{ENV:testScript} -s [OR]
RewriteCond %{ENV:testScript} -f
RewriteRule .* %{ENV:testURI} [L]
#Else if a ENV:testDile is set, then pass the name to the php script
RewriteCond %{ENV:testFile} !^$
RewriteRule .* /filechecker.php?page=%{ENV:testFile} [L]
仅供参考:Apache mod_rewrite文档值得一读,如果您不清楚上述规则的作用,或者您想要更抽象的内容,请考虑以下post。