通过查询 stackoverflow.com URL 之类的数据库值进行重定向
Redirection by querying database value like stackoverflow.com URLs
所以我使用下面的 htaccess 代码将 URLs 重定向到干净的 URLs 但是,现在我需要做的是让原来的 URLs 到重定向到新的干净 URLS.
示例
原文URL:
example.com/search/store_info.php?store=113&dentist=Dr.%20John%20Doe
清洁 URL:
example.com/search/113/dr-john-doe
我需要的是“ORIGINAL URL”重定向到“CLEAN URL” .我需要这样做的原因是 URL 都出现在 Google 搜索中。
我只想显示干净的 URL,只要使用原始 URL,它就会自动重定向到干净的 URL。它目前不这样做。
这是我的 htaccess 文件。
ErrorDocument 404 default
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /search/
RewriteCond %{QUERY_STRING} .
RewriteCond %{THE_REQUEST} /store_info\.php\?store=([a-z0-9]+)&dentist=([^\s&]+) [NC]
RewriteRule ^ %1/%2/? [L,NE,R=301]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_URI} \.(?:jpe?g|gif|bmp|png|ico|tiff|css|js)$ [NC]
RewriteRule ^ - [L]
RewriteRule ^([a-z0-9]+)/([^\s.]*)[.\s]+(.*)$ /- [NC,DPI,E=DONE:1]
RewriteCond %{ENV:DONE} =1
RewriteRule ^([0-9a-z]+)/([^\s.]+)$ / [R=301,NE,L]
RewriteRule ^([a-z0-9]+)/([a-z0-9-]+)/?$ store_info.php?store=&dentist= [QSA,L,NC]
</IfModule>
我读过有关 RedirectMatch 的内容,但我不知道在我的 htaccess 文件中将其实现在哪里。
您不再需要用任意 rules/directives 来弄乱您的 htaccess 文件。当前的规则集,带有 %{THE_REQUEST}
匹配,后来带有 %{ENV=DONE}
条件就足够了。
只需等待几天 google 即可再次抓取您的网页,旧的不干净网址将消失。您也可以在 Google 网站站长工具中搜索,看看是否可以手动触发。
PS:您可以从第一条规则中删除 RewriteCond %{QUERY_STRING} .
行。
在你的 store_info.php
中有这样的代码:
<?php
$store = $_GET['store'];
if (empty($store)) {
header("HTTP/1.1 404 Not Found");
exit;
}
$dentist = $_GET['dentist']);
// pull dentist from DB by store id. Create this function in PHP and
// query your database
$dentistFromDB = preg_replace('/[\h.]+/', '-', $row['businessName']);
// DB returns an empty or no value
if (empty($dentistFromDB)) {
header("HTTP/1.1 404 Not Found");
exit;
}
// DB returned value doesn't match the value in URL
if ($dentistFromDB != $dentist) {
// redirect with 301 to correct /<store>/<dentist> page
header ('HTTP/1.1 301 Moved Permanently');
header('Location: /' . $store . '/' . $dentistFromDB);
exit;
}
// rest of the PHP code should come now
?>
所以我使用下面的 htaccess 代码将 URLs 重定向到干净的 URLs 但是,现在我需要做的是让原来的 URLs 到重定向到新的干净 URLS.
示例
原文URL:
example.com/search/store_info.php?store=113&dentist=Dr.%20John%20Doe
清洁 URL:
example.com/search/113/dr-john-doe
我需要的是“ORIGINAL URL”重定向到“CLEAN URL” .我需要这样做的原因是 URL 都出现在 Google 搜索中。
我只想显示干净的 URL,只要使用原始 URL,它就会自动重定向到干净的 URL。它目前不这样做。
这是我的 htaccess 文件。
ErrorDocument 404 default
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /search/
RewriteCond %{QUERY_STRING} .
RewriteCond %{THE_REQUEST} /store_info\.php\?store=([a-z0-9]+)&dentist=([^\s&]+) [NC]
RewriteRule ^ %1/%2/? [L,NE,R=301]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_URI} \.(?:jpe?g|gif|bmp|png|ico|tiff|css|js)$ [NC]
RewriteRule ^ - [L]
RewriteRule ^([a-z0-9]+)/([^\s.]*)[.\s]+(.*)$ /- [NC,DPI,E=DONE:1]
RewriteCond %{ENV:DONE} =1
RewriteRule ^([0-9a-z]+)/([^\s.]+)$ / [R=301,NE,L]
RewriteRule ^([a-z0-9]+)/([a-z0-9-]+)/?$ store_info.php?store=&dentist= [QSA,L,NC]
</IfModule>
我读过有关 RedirectMatch 的内容,但我不知道在我的 htaccess 文件中将其实现在哪里。
您不再需要用任意 rules/directives 来弄乱您的 htaccess 文件。当前的规则集,带有 %{THE_REQUEST}
匹配,后来带有 %{ENV=DONE}
条件就足够了。
只需等待几天 google 即可再次抓取您的网页,旧的不干净网址将消失。您也可以在 Google 网站站长工具中搜索,看看是否可以手动触发。
PS:您可以从第一条规则中删除 RewriteCond %{QUERY_STRING} .
行。
在你的 store_info.php
中有这样的代码:
<?php
$store = $_GET['store'];
if (empty($store)) {
header("HTTP/1.1 404 Not Found");
exit;
}
$dentist = $_GET['dentist']);
// pull dentist from DB by store id. Create this function in PHP and
// query your database
$dentistFromDB = preg_replace('/[\h.]+/', '-', $row['businessName']);
// DB returns an empty or no value
if (empty($dentistFromDB)) {
header("HTTP/1.1 404 Not Found");
exit;
}
// DB returned value doesn't match the value in URL
if ($dentistFromDB != $dentist) {
// redirect with 301 to correct /<store>/<dentist> page
header ('HTTP/1.1 301 Moved Permanently');
header('Location: /' . $store . '/' . $dentistFromDB);
exit;
}
// rest of the PHP code should come now
?>