我尝试使用htaccess文件和PHP生成seo友好的URL。但它没有用。
我在localhost(运行XAMPP)中尝试了以下代码
RewriteEngine On
RewriteBase /real/
RewriteRule ^property-details/([0-9a-zA-Z]+) property-details.php?pid=$1 [NC, L]
答案 0 :(得分:1)
有不同的方法可以获得相同的结果,但这将为您提供指导。
首先激活mod_rewrite取消注释httpd.conf或apache2.conf文件中的这一行:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
将AllowOverride从none更改为All到您的www目录
<Directory />
AllowOverride All
Require all denied
</Directory>
重启apache:
sudo apachectl restart
或
sudo service apache2 restart
在您的www文件夹中,创建一个.htaccess文件并添加:
# | SEO URL
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*$ ./index.php
然后在index.php文件中:
<?php
$url_params=get_url_params();
// then access your url_params
if (isset($url_params[1]))
{
switch ($url_params[1])
{
case 'login':
echo "<h1>Login</h2>";
break;
case 'contact':
echo "<h1>Cantact</h2>";
break;
default:
echo "<h1>Home</h2>";
break;
}
}
function get_url_params($site_url='')
{
$base_url=explode("/", $site_url);
$request = $_SERVER['REQUEST_URI'];
$url_params = explode("/", $request);
$delete_extensions=array('.html','.htm');
$data[]=array();
foreach ($base_url as $b)
{
unset( $url_params[array_search( "$b", $url_params )] );
}
foreach ($url_params as $u)
{
foreach ($delete_extensions as $e){
$u=str_replace($e, "", $u);
}
$data[]=$u;
}
return $data;
}
?>
答案 1 :(得分:0)
[NC, L]
您需要删除RewriteRule
标记之间的空格。这将导致500内部服务器错误 - 在这种情况下,您应检查错误日志以获得更有意义的错误。它应该写成:
[NC,L]
没有空格。
<强>更新强>
要使mod_rewrite在每个目录.htaccess文件中工作,还必须启用FollowSymLinks
(如果尚未启用)。在.htaccess文件的最顶部,包括:
Options +FollowSymLinks