我只是找不到我需要的正确解决方案,所以我希望有人能够在这里帮助我。
我现在有包含此文件的网站:
/admin/
/images/
/js/
about.php
index.php
news.php
questions.php
所以我现在的网址是:www.mydomain.com/about.phpwww.mydomain.com/news.php...
我想有 www.mydomain.com/about/,www.mydomain.com/news/,...
我尝试了很多我发现的东西,但没有一个像它应该的那样工作,或者它搞砸了其他东西。
我最接近的是这个:
RewriteRule about/ about.php
RewriteRule about about.php
但是,如果我在包含名称的代码中使用一些图像(示例图像/关于我.jpg),这也会导致混乱 - 可能是因为第二个语句。
通过httpd.conf
启用mod_rewrite和 .htaccess,然后将此代码放在.htaccess
DOCUMENT_ROOT
目录下:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s([^.]+).php [NC]
RewriteRule ^ %1 [R,L,NC]
## To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]
为了让生活更简单,我会停止使用基于目录的 URL
/大约/
并使用更简单的文件基网址
/大约
该额外的斜杠将页面移动到子目录中,并且页面中的所有相对引用都将中断。
或者,您可以更改所有链接、包含和图片网址,以确保它们都相对于域的根目录。为此,您可以在 URL 之前始终包含斜杠 (/) 或使其成为完整的 URL。
并使您的规则更具体:
重写规则 ^/about$ about.php
那些额外的^$表示开始和结束,所以它必须是完全匹配的。
我有用
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(about)$ about.php