我尝试了很多方法,但都没有成功。Blog是域名,Home是域中的一个文件夹,post.php是从数据库中获取详细信息的页面。因此,在我的领域,我有:home/post.php
RewriteEngine On # Turn on the rewriting engine
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9_-]+)$ /post?read=$1 [L] # Handle page requests
上面是我使用的最后一个代码,它不起作用。我得到一个404错误。
RewriteEngine On # Turn on the rewriting engine RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([A-Za-z0-9_-]+)$ /post?read=$1 [L] # Handle page requests
.htaccess位于文件夹的根目录中。
您似乎忽略了home
子目录。(尽管您在问题中提到了home
和Home
,但请注意,这是区分大小写的。(;CCD_ 4是一个PHP文件;那么您应该重写为post.php
,而不仅仅是post
?
请注意,Apache不支持行尾注释,正如您在这里使用的那样。(往好了说它们被忽略,往坏了说它们会触发500个错误。(
如果.htaccess
文件位于文档根目录中,正如您所建议的那样,那么您需要按照以下方式编写规则:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^home/([w-]+)$ home/post.php?read=$1 [L]
w
的简写字符类与[A-Za-z0-9_]
相同。
RewriteRule
模式与相对于.htaccess
文件位置的URL路径相匹配。
另一方面,如果.htaccess
文件在/home
子目录中(即在/home/.htaccess
(,那么您应该这样写规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([w-]+)$ post.php?read=$1 [L]
注意,替换字符串上没有斜杠前缀。