英文:
Not work RewriteCond in file .htaccess when write rule for many index file
问题
当我发送请求"http://domain/index.php"或"http://domain"时,我希望服务器返回404状态码。当我发送"http://domain/some-path/index.php"时,我希望服务器从"some-path"目录中返回一个索引文件。但是服务器在所有情况下都返回404状态码。以下是我的htaccess文件中的代码:
RewriteEngine On
#RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{REQUEST_URI} ^/$ [OR]
RewriteCond %{REQUEST_URI} ^/index\.html$
RewriteRule ^ - [L,R=404]
RewriteCond %{REQUEST_URI} ^/some-path/?$
RewriteRule ^ - [L,R=403]
RewriteRule ^some-path\/(([^.]+\.(html|php))|(assets\/.*))$ /$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^some-path\/([^/.]+)$ $1.html [L]
看起来RewriteCond %{REQUEST_URI} ^/index\.html$
这一行没有正常工作。
英文:
When i make a request "http://domain/index.php" or such "http://domain" i want the server to give me 404 code. When i make "http://domain/some-path/index.php" i want the server to give me an index file from the "some-path" directory. But server give me 404 code in all cases. There my code in htaccsess file.
RewriteEngine On
#RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{REQUEST_URI} ^/$ [OR]
RewriteCond %{REQUEST_URI} ^/index\.html$
RewriteRule ^ - [L,R=404]
RewriteCond %{REQUEST_URI} ^/some-path/?$
RewriteRule ^ - [L,R=403]
RewriteRule ^some-path\/(([^.]+\.(html|php))|(assets\/.*))$ /$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^some-path\/([^/.]+)$ $1.html [L]
It seems that the line RewriteCond %{REQUEST_URI} ^/index\.html$
does not work correctly.
答案1
得分: 2
请确保在测试URL之前清除浏览器缓存,并确保将.html文件与.htaccess规则文件放在一起。
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/$ [OR]
RewriteCond %{REQUEST_URI} ^index\.html$
RewriteRule ^ - [L,R=404]
RewriteCond %{REQUEST_URI} ^/?some-path/?$
RewriteRule ^ - [L,R=403]
RewriteRule ^some-path\/(([^.]+\.(html|php))|(assets\/.*))$ /$1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^some-path\/([^/.]+)$ $1.html [NC,L]
希望对你有帮助!
英文:
With your shown samples and attempts please try following .htaccess rules file.
- Please make sure to clear your browser cache before testing your URLs.
- Also make sure to keep your .html files along side with your .htaccess rules file.
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/$ [OR]
RewriteCond %{REQUEST_URI} ^index\.html$
RewriteRule ^ - [L,R=404]
RewriteCond %{REQUEST_URI} ^/?some-path/?$
RewriteRule ^ - [L,R=403]
RewriteRule ^some-path\/(([^.]+\.(html|php))|(assets\/.*))$ /$1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^some-path\/([^/.]+)$ $1.html [NC,L]
答案2
得分: 0
这是我的答案
RewriteEngine On
RewriteCond %{THE_REQUEST} ^(?!.*(some-path|robots\.txt)).*$
RewriteRule ^ - [L,R=404]
RewriteCond %{REQUEST_URI} ^some-path/?$
RewriteRule ^ - [L,R=403]
RewriteRule ^some-path\/(([^.]+\.(html|php))|(assets\/.*))$ /$1 [L]
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^some-path\/([^/.]+)$ /$1.php [L]
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^some-path\/([^/.]+)$ /$1.html [L]
英文:
This is my answer
RewriteEngine On
RewriteCond %{THE_REQUEST} ^(?!.*(some-path|robots\.txt)).*$
RewriteRule ^ - [L,R=404]
RewriteCond %{REQUEST_URI} ^some-path/?$
RewriteRule ^ - [L,R=403]
RewriteRule ^some-path\/(([^.]+\.(html|php))|(assets\/.*))$ /$1 [L]
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^some-path\/([^/.]+)$ /$1.php [L]
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^some-path\/([^/.]+)$ /$1.html [L]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论