尝试将.htaccess
文件设置为将所有以.php
结尾或没有文件扩展名的URL直接定向到index.php
。因此,像mysite.com/about
和mysite.com/news.php
这样的URL会转到index.php
,但是mysite.com/someimage.jpg
和mysite.com/mystyle.css
会被正常处理。
当我用常规的旧PHP测试时,我以为有了它,但是.htaccess
文件中似乎没有翻译。这是我想出的两个规则:
RewriteRule [A-Za-z0-9]*$ "index.php" [L] # URLs with no extension
RewriteRule [A-Za-z0-9]*\.php$ "index.php" [L] # ending in .php
使用这些规则,不会提供CSS和图像之类的文件,所有内容仍将发送至index.php
,因此当浏览器要求提供样式表时,服务器将为index.php
提供服务。我尝试注释掉.php
规则,因此仅应用了'no extension'规则,结果相同。我曾尝试像在URL开头那样在开头添加一个斜杠,但实际上会破坏事情,因此没有规则适用。
我在这里缺少什么微小但显而易见的细节?
答案 0 :(得分:2)
您的扩展名以字母字符结尾,因此[A-Za-z0-9]*$
与jpg
的{{1}}和.jpg
的{{1}}匹配。
我认为:
css
将完成您想要的。也就是说,如果文件以.css
结尾或完整路径中没有句点,则将其发送到RewriteRule (\.php|^[^.]+)$ "index.php" [L]
。
https://regex101.com/r/AE8AjY/1/
与您的正则表达式相比:
https://regex101.com/r/AE8AjY/2/(通过将.php
设置为可选,将这两个规则合并为一个)
答案 1 :(得分:0)
具有这种方式:
RewriteEngine On
# ignore index.php
RewriteRule ^index\.php$ [L,NC]
# URLs with no extension OR URLs ending with .php
RewriteRule ^[\w-]+(?:\.php)?$ index.php [L,NC]